//突然发现怎么让字体变色了..这样看着比较舒服..
1
//
01背包入门(一维数组)
2 1.#include<iostream>
3 2. #define maxn 1005
4 3. using namespace std;
5 4. int v[maxn],w[maxn],dp[maxn];
6 5. int max( int a, int b)
7 6.{
8 7. return a>b?a:b;
9 8.}
10 9. int main()
11 10.{
12 11. // freopen("1002.txt","r",stdin);
13 12. int t,n,m,i,j;
14 13. while(~scanf( " %d ",&t))
15 14. {
16 15. while(t--)
17 16. {
18 17. memset(v, 0, sizeof(v));
19 18. memset(w, 0, sizeof(w));
20 19. memset(dp, 0, sizeof(dp));
21 20. scanf( " %d%d ",&n,&m);
22 21. for(i= 0;i<n;i++)
23 22. scanf( " %d ",w+i);
24 23. for(i= 0;i<n;i++)
25 24. scanf( " %d ",v+i);
26 25. for(i= 0;i<n;i++)
27 26. for(j=m;j>=v[i];j--) // j表示当前背包剩余容量
28 27. dp[j]=max(dp[j],dp[j-v[i]]+w[i]); // dp[j-v[i]+w[i]]代表装入第i件物品
29 28. printf( " %d\n ",dp[m]);
30 29. }
31 30.
32 31. }
33 32. return 0;
34 33.}
2 1.#include<iostream>
3 2. #define maxn 1005
4 3. using namespace std;
5 4. int v[maxn],w[maxn],dp[maxn];
6 5. int max( int a, int b)
7 6.{
8 7. return a>b?a:b;
9 8.}
10 9. int main()
11 10.{
12 11. // freopen("1002.txt","r",stdin);
13 12. int t,n,m,i,j;
14 13. while(~scanf( " %d ",&t))
15 14. {
16 15. while(t--)
17 16. {
18 17. memset(v, 0, sizeof(v));
19 18. memset(w, 0, sizeof(w));
20 19. memset(dp, 0, sizeof(dp));
21 20. scanf( " %d%d ",&n,&m);
22 21. for(i= 0;i<n;i++)
23 22. scanf( " %d ",w+i);
24 23. for(i= 0;i<n;i++)
25 24. scanf( " %d ",v+i);
26 25. for(i= 0;i<n;i++)
27 26. for(j=m;j>=v[i];j--) // j表示当前背包剩余容量
28 27. dp[j]=max(dp[j],dp[j-v[i]]+w[i]); // dp[j-v[i]+w[i]]代表装入第i件物品
29 28. printf( " %d\n ",dp[m]);
30 29. }
31 30.
32 31. }
33 32. return 0;
34 33.}