您的位置:首页 > 其它

joj 2526: medic

2011-03-01 13:54 435 查看
http://acm.jlu.edu.cn/joj/showproblem.php?pid=2526

最基本的0-1背包问题

动态规划 2维解法 (因为数组开错 导致wa 所以贴出来警示自己

#include<stdio.h>
#include<iostream>
using namespace std;
#define T 1005
#define M 105
int f[M][T];
int max(int a,int b){
if(a>=b) return a;
return b;
}
int main(){
int size,m;
int t[T],w[T];
int i,j,ans;
while(scanf("%d%d",&size,&m)!=EOF){
for(i=1;i<=m;i++)
cin>>t[i]>>w[i];
for(i=0;i<=size;i++)
f[0][i]=0;
for(i=1;i<=m;i++)
for(j=0;j<=size;j++){
if(i==1) f[i][j]=0;
else f[i][j]=f[i-1][j];
if(j>=t[i]) f[i][j]=max(f[i-1][j],f[i-1][j-t[i]]+w[i]);
}
cout<<f[m][size]<<endl;
}
return 0;
}


一维解法

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define T 1005
#define M 105
int f[T];
int max(int a,int b){
if(a>=b) return a;
return b;
}
int main(){
int size,m;
int t,w;
int i,j;
while(scanf("%d%d",&size,&m)!=EOF){
memset(f,0,sizeof(f));

for(i=1;i<=m;i++){
cin>>t>>w;
for(j=size;j>=0;j--)
if(j>=t) f[j]=max(f[j],f[j-t]+w);
}
cout<<f[size]<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: