【noi 2.6_7113】Charm Bracelet(DP)

题意: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 }
原文地址:https://www.cnblogs.com/konjak/p/5962789.html