package main import ( "fmt" ) func Max(a, b int) int { if a>b{ return a } return b } func main() { var n, m int fmt.Scan(&n, &m) var value = make([][]int, m+1) // 附件的主件索引是从1开始的 var weight = make([][]int, m+1) var dp = make([]int, n+1) var v, w, q int for i:=0;i<=m;i++{ value[i] = make([]int, 3) weight[i] = make([]int, 3) } for i:=1;i<=m;i++{ fmt.Scan(&v, &w, &q) if q == 0{ // 主件 value[i][0]=v weight[i][0]=w*v }else if value[q][1] == 0 { // 作为附件1 value[q][1] =v weight[q][1] = w*v }else{ // 作为附件2 value[q][2] =v weight[q][2] = w*v } } for i:=1;i<=m;i++{ for j:= n;j>=0;j-=10{ if value[i][0]!=0 && value[i][0] <= j { // 只考虑主件 dp[j] = Max(dp[j], weight[i][0] + dp[j-value[i][0]]) } if value[i][0]!=0 && value[i][1]!=0 && value[i][0] + value[i][1] <= j{ // 考虑主件和附件1 dp[j] = Max(dp[j], weight[i][0] + weight[i][1] + dp[j-value[i][0] - value[i][1]]) } if value[i][0]!=0 && value[i][2]!=0 && value[i][0] + value[i][2] <= j{ // 考虑主件和附件2 dp[j] = Max(dp[j], weight[i][0] + weight[i][2] + dp[j-value[i][0] - value[i][2]]) } if value[i][0]!=0 && value[i][1]!=0 && value[i][2]!=0 && value[i][0] + value[i][1] + value[i][2] <= j{ // 考虑主件、附件1和附件2 dp[j] = Max(dp[j], weight[i][0] + weight[i][1] + weight[i][2] + dp[j-value[i][0] - value[i][1] - value[i][2]]) } } } fmt.Println(dp[n]) }