1294:Charm Bracelet

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]理论上不属于上一行,而属于这一行。

posted @ 2021-08-16 21:32  Rekord  阅读(380)  评论(0编辑  收藏  举报