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 }