题意:N个饰物,有重量和渴望程度。问在M的重量限制内能达到的最大的渴望度。
解法:经典的01问题,但有一个小技巧值得记住:用if比较大小比调用max函数快了不少,这题有100ms左右。
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 using namespace std; 6 #define VV 12900 7 int w[VV],d[VV],f[VV]; 8 9 int main() 10 { 11 int n,V; 12 scanf("%d%d",&n,&V); 13 for (int i=1;i<=n;i++) 14 scanf("%d%d",&w[i],&d[i]); 15 memset(f,0,sizeof(f)); 16 for (int i=1;i<=n;i++) 17 for (int j=V;j>=w[i];j--) 18 if (f[j-w[i]]+d[i]>f[j]) f[j]=f[j-w[i]]+d[i]; 19 printf("%d ",f[V]); 20 return 0; 21 }