1. 程式人生 > 其它 >Ts基本資料型別

Ts基本資料型別

完全揹包問題

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 const int N=35;
 6 struct knapsack{
 7     int w,v;
 8 };
 9 knapsack ns[N];
10 int cmp(knapsack x,knapsack y){
11     return 1.0*x.v/x.w>1.0*y.v/y.w;
12 }
13 int main(){
14     int m,n,ans=0;
15     cin>>m>>n;
16 for(int i=1;i<=n;i++)cin>>ns[i].w>>ns[i].v; 17 sort(ns+1,ns+n+1,cmp); 18 for(int i=1;i<=n;i++){ 19 int t=m/ns[i].w; 20 ans+=t*ns[i].v; 21 m%=ns[i].w; 22 } 23 cout<<"max="<<ans; 24 return 0; 25 }

使用貪心顯然是不夠全面和嚴謹的!

正確的求解:三層迴圈dp求解。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 const int N=205;
 6 int a[N],b[N],f[N][N];
 7 int main(){
 8     int m,n;
 9     cin>>m>>n;
10     for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
11     for(int i=1;i<=n;i++)
12         for(int
j=1;j<=m;j++){ 13 for(int k=j/a[i];k>=0;k--) 14 f[i][j]=max(f[i][j],b[i]*k+f[i-1][j-a[i]*k]); 15 } 16 cout<<"max="<<f[n][m]; 17 return 0; 18 }