package main
// import "fmt"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param v int整型
* @param n int整型
* @param nums int整型二维数组
* @return int整型一维数组
*/
func knapsack( v int , n int , nums [][]int ) []int {
// write code here
dp := make([]int, v+1)
for i:=0;i<n;i++ {
for j:=v;j >= nums[i][0];j-- {
tmp := j
cnt := 1
for tmp >= cnt * nums[i][0] {
dp[j] = max(dp[j], dp[j-nums[i][0] * cnt] + nums[i][1] * cnt)
cnt++
}
}
}
dp2 := make([]int, v+1)
for i:=0;i<v+1;i++ {
dp2[i] = -99999
}
dp2[0] = 0
for i:=0;i<n;i++ {
for j:=v;j >= nums[i][0];j-- {
tmp := j
cnt := 1
for tmp >= cnt * nums[i][0] {
dp2[j] = max(dp2[j], dp2[j-nums[i][0] * cnt] + nums[i][1] * cnt)
cnt++
}
}
}
// fmt.Println(dp2)
if dp2[v] < 0 {
dp2[v] = 0
}
res := []int{dp[v],dp2[v]}
return res
}
func max(a,b int) int {
if a > b {
return a
}
return b
}