全RE0分求助!!

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

@[LogicM](/user/450181) 《勤奋》
by shiwei06232 @ 2021-11-25 22:34:09


dp函数里没判断 $i$ 的越界啊
by shiwei06232 @ 2021-11-25 22:37:39


加个 ```cpp if(i>m)return 0; ```
by shiwei06232 @ 2021-11-25 22:38:47


曹老师你这代码加了也肯定过不了,这就是01背包变体,我写了四个判断条件和四个动转方程呢
by KRTK_JC @ 2021-11-26 21:52:58


~~~ #include <bits/stdc++.h> using namespace std; int n,m,f[33333]; struct node { int v,p; }t[33333]; vector <int> fu[65]; int main() { cin>>m>>n; int idx=0; for(int i=1;i<=n;i++) { int in1,in2,in3; cin>>in1>>in2>>in3; if(in3==0) { fu[i].push_back(i); t[i].v=in1; t[i].p=in2*in1; } else { fu[in3].push_back(i); t[i].v=t[fu[in3][0]].v+in1; t[i].p=t[fu[in3][0]].p+in2*in1; } } for(int i=1;i<=n;i++) { for(int j=m;t[i].p!=0 && j>=t[i].v;j--) { f[j]=max(f[j],f[j-t[i].v]+t[i].p); if(j>=t[i].v+fu[i][1] && fu[i].size()>2) f[j]=max(f[j],f[j-t[i].v-t[fu[i][1]].v]+t[i].p+t[fu[i][1]].p); else if(j>=t[i].v+fu[i][2] && fu[i].size()>3) f[j]=max(f[j],f[j-t[i].v-t[fu[i][2]].v]+t[i].p+t[fu[i][2]].p); else if(j>=t[i].v+fu[i][2]+fu[i][1] && fu[i].size()>3) f[j]=max(f[j],f[j-t[i].v-t[fu[i][2]].v-t[fu[i][1]].v]+t[i].p+t[fu[i][2]].p+t[fu[i][1]].p); } } //for(int i=1;i<=n;i++) cout<<t[i].p<<' '; cout<<f[n]; return 0; } ``` 为啥我也RE,求助dalao
by luoguhandongheng @ 2022-03-28 18:08:37


@[shiwei06232](/user/450188) dashenhaolihai
by caoyifan111 @ 2022-10-21 17:25:37


|