892611452 2012-01-18 22:34:00
点我顶贴
收藏
删除
#include<iostream>
using namespace std;
int n,c,w[5001],v[5001],b[10001];
int main()
{ cin>>n>>c;for(int i=1;i<=n;i++)cin>>w[i]>>v[i];
for(int i=1;i<=n;i++)
for(int j=w[i];j<=c;j++)
b[j]=max(b[j],b[j-w[i]]+v[i]);
cout<<b[c]<<endl;
return 0;}
#2 wh3z_wsc@2012-01-18 22:34:00
24598
回复
删除
简单的完全背包!
#include<iostream>
using namespace std;
int max(int a,int b){
return a>b?a:b;}
int main(){
int i,j,f[10010],n,m,a[5010],b[5010];
cin>>n>>m;
for(i=1;i<=n;i++)cin>>a[i]>>b[i];
for(i=1;i<=m;i++)f[i]=-50000;//初始值
f[0]=0;
for(i=1;i<=n;i++)
for(j=a[i];j<=m;j++)
f[j]=max(f[j],f[j-a[i]]+b[i]);
cout<<f[m]<<endl;
}