1294:Charm Bracelet
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 using namespace std; 5 6 const int N=3505; 7 int a[N],b[N],f[12885]; 8 int main(){ 9 int m,n; 10 cin>>n>>m; 11 for(int i=1;i<=n;i++) 12 scanf("%d%d",&a[i],&b[i]); 13 for(int i=1;i<=n;i++) 14 for(int j=m;j>0;j--) 15 if(j>=a[i])f[j]=max(f[j],b[i]+f[j-a[i]]); 16 cout<<f[m]; 17 return 0; 18 }
由于m和n给的范围比较大,所以f必须为一维数组,否则内存过不去。
f化为一维数组后,必须从m到1,而不能从1到m,否则前面的f[i]理论上不属于上一行,而属于这一行。