60求助 !!WA 3 7 8 9

P1064 [NOIP2006 提高组] 金明的预算方案

感觉就是分组,分组也已经分好了,但是不知道为什么最后遍历完就错了
by small_C_77777 @ 2022-05-01 15:22:26


https://www.luogu.com.cn/discuss/402676 这个应该能帮到你。 这是我的代码。 我原来也是这几个点错。原因见链接。 主要是输入时对编号理解错误 ```cpp #include<bits/stdc++.h> using namespace std; int n,m,N; int V[150][3],P[150][3]; int dp[32005]; int main() { scanf("%d%d",&n,&m); int v,p,q; for(int i = 1;i <= m;i ++) { scanf("%d%d%d",&v,&p,&q); if(q == 0){ V[i][0] = v; P[i][0] = p; }else{ if(V[q][1] == 0){ V[q][1] = v; P[q][1] = p; }else{ V[q][2] = v; P[q][2] = p; } } } for(int i = 1;i <= m;i ++) { for(int j = n;j >= V[i][0] && V[i][0];j -= 10) { dp[j] = max(dp[j],dp[j - V[i][0]] + V[i][0] * P[i][0]); // printf("dp[%d] = %d\n",j,dp[j]); if(V[i][1] && j >= V[i][0] + V[i][1]){ dp[j] = max(dp[j],dp[j - V[i][0] - V[i][1]] + V[i][0] * P[i][0]+ V[i][1] * P[i][1]); } if(V[i][2] && j >= V[i][0] + V[i][2]){ dp[j] = max(dp[j],dp[j - V[i][0] - V[i][2]] + V[i][0] * P[i][0]+ V[i][2] * P[i][2]); } if(V[i][2] && V[i][1] && j >= V[i][0] + V[i][1] + V[i][2]){ dp[j] = max(dp[j],dp[j - V[i][0] - V[i][1] - V[i][2]] + V[i][0] * P[i][0]+ V[i][1] * P[i][1] + V[i][2] * P[i][2]); } } } printf("%d",dp[n]); return 0; } ```
by __Shao__ @ 2022-06-06 23:00:51


|