package main import ( "fmt" ) type Item struct { count, value, weight int } func main() { var n,w int fmt.Scan(&n, &w) arr := make([]Item, n) for i:=0;i<n;i++ { fmt.Scan(&arr[i].count, &arr[i].weight, &arr[i].value) } dp := make([]int, w+1) for i:=0;i<n;i++ { for j:=w;j>=arr[i].weight;j-- { cnt := arr[i].count for cnt > 0 { if j >= arr[i].weight * cnt { dp[j] = max(dp[j], dp[j - arr[i].weight * cnt] + arr[i].value * cnt) } cnt-- } } } // fmt.Println(dp) fmt.Println(dp[w]) } func max(a,b int) int { if a > b { return a } return b }