Skip to content

Instantly share code, notes, and snippets.

@IKKO-Ohta
Last active September 20, 2017 16:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save IKKO-Ohta/1d808de82c20d5a614cc9dd5f229e6a2 to your computer and use it in GitHub Desktop.
Save IKKO-Ohta/1d808de82c20d5a614cc9dd5f229e6a2 to your computer and use it in GitHub Desktop.
ARC083[C].go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
// global
var sc = bufio.NewScanner(os.Stdin)
var m = []float64{0, 0, -1}
var mem = [3000][3000]float64{}
func cal(a, b float64) float64 {
if a != 0 && b != 0 {
return 100 * b / (a + b)
} else {
return 0
}
}
func dfs(water float64, suger float64, p float64, nums []float64) float64 {
wi := int(water)
si := int(suger)
if water+suger > nums[5] {
// pass
} else if mem[wi][si] == 0 {
mem[wi][si] = cal(water, suger)
} else {
return mem[wi][si]
}
if water != 0 && (suger/water > nums[4]/100 || water+suger > nums[5]) {
return p
}
if m[2] < cal(water, suger) {
m = []float64{water, suger, cal(water, suger)}
}
ans := nmax(
dfs(water+nums[0]*100, suger, cal(water, suger), nums),
dfs(water+nums[1]*100, suger, cal(water, suger), nums),
dfs(water, suger+nums[2], cal(water, suger), nums),
dfs(water, suger+nums[3], cal(water, suger), nums),
)
return ans
}
func main() {
st := strings.Split(nextLine(), " ")
nums := (Filter(st))
//nums := [6]float64{1, 2, 10, 20, 15, 200}
dfs(nums[0]*100, 0, 0, nums)
dfs(nums[1]*100, 0, 0, nums)
fmt.Println(m[0]+m[1], m[1])
}
// ----------------------------------//
// utils //
// ----------------------------------//
func nmax(args ...float64) float64 {
ret := -1000000000.01
for _, v := range args {
if ret < v {
ret = v
}
}
return ret
}
func nextLine() string {
sc.Scan()
return sc.Text()
}
func Filter(s []string) []float64 {
var p []float64
var val float64
for _, v := range s {
val, _ = strconv.ParseFloat(v, 64)
p = append(p, val)
}
return p
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment