HDU 2660 Accepted Necklace

http://acm.hdu.edu.cn/showproblem.php?pid=2660

做下这道二维费用的问题。。。。。

结果自己把两个维数代表的东西都搞反了,最重要的是TM的样例过了。。。

然后自己就泪奔。。。。

最后看别人题解,和自己是一样的啊。。。

然后就仔细看了下代码,过了。

内循环其实是可以互换循环的位置的。

不知道为什么AC
 1 #include <iostream>
 2 using namespace std;
 3 const int weight_maxn = 1005;
 4 const int number_maxn = 25;
 5 int ans[weight_maxn][number_maxn],v[number_maxn],w[number_maxn];
 6 int main()
 7 {
 8     int t,n,k,i,j,m,l;
 9     cin>>t;
10     while(t--)
11     {
12         cin>>n>>k;
13         for(i=0;i<n;i++)
14             cin>>v[i]>>w[i];
15         cin>>m;
16         for(i=0;i<m;i++)
17         for(j=0;j<k;j++)
18             ans[i][j]=0;
19         for(i=0;i<n;i++)
20         {
21             for(l=k;l>=0;l--)
22             for(j=m;j>=w[i];j--)
23             if(l>0 && ans[j-w[i]][l-1]+v[i]>ans[j][l])
24                 ans[j][l]=ans[j-w[i]][l-1]+v[i];
25         }
26         cout<<ans[m][k]<<endl;
27     }
28     return 0;
29 }

看了别人的题解才写的。

9/23

今天做了HDU 3496之后再回来看,发现都不知道自己写的是什么东西。明显就是应该是错的感觉,初始化的时候明显就是初始化错的感觉。

这题和HDU 3496可以说是一样的,然后就一遍过了。

View Code
 1 #include <iostream>
 2 #include <string.h>
 3 using namespace std;
 4 const int max_number = 25;
 5 const int max_weight = 1005;
 6 int ans[max_number][max_weight],v[max_number],w[max_number];
 7 int main()
 8 {
 9     int t,n,k,i,j,l,m;
10     cin>>t;
11     while(t--)
12     {
13         cin>>n>>k;
14         for(i=0;i<n;i++)
15             cin>>v[i]>>w[i];
16         cin>>m;
17         memset(ans,-1,sizeof(ans));
18         for(j=0;j<=max_weight;j++)
19             ans[0][j]=0;  //哪一维的要求,就初始化哪一维
20         for(i=0;i<n;i++)
21         {
22             for(j=m;j>=w[i];j--)
23             for(l=k;l>0;l--)
24             if(ans[l-1][j-w[i]]+v[i]>ans[l][j])
25                 ans[l][j]=ans[l-1][j-w[i]]+v[i];
26         }
27         cout<<ans[k][m]<<endl;
28     }
29     return 0;
30 }
原文地址:https://www.cnblogs.com/yoru/p/2698352.html