/*
Name: UVA 624 CD
Copyright: angieeve
Author:ZJ
AC Date: 26/03/13 15:15
Description: 01backpack problem
*/
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int maxvalue,tracknum;
int dp[30][10010];
int data[30];
void backpack(){
for(int i=1;i<=tracknum;i++){
for(int j=maxvalue;j>=0;j--){
dp[i][j]=dp[i-1][j];
if(j>=data[i])
dp[i][j]=dp[i][j]>(dp[i-1][j-data[i]]+data[i])?dp[i][j]:(dp[i-1][j-data[i]]+data[i]);
}
}
}
void output(int i,int j){
if(i==0) return ;
if (dp[i][j]==dp[i-1][j]) output(i-1,j);
else{
output(i-1,j-data[i]);
printf("%d ",data[i]);
}
}
int main(){
while(scanf("%d%d",&maxvalue,&tracknum)!=EOF){
memset(dp,0,sizeof(dp));
memset(data,0,sizeof(data));
for(int i=1;i<=tracknum;i++)
cin>>data[i];
backpack();
/* for(int i=0;i<tracknum;i++){
for(int j=0;j<=maxvalue;j++){
cout<<dp[i][j]<<" ";}
cout<<endl;}*/
// cout<<"function here"<<endl;
output(tracknum,maxvalue);
printf("sum:%d\n",dp[tracknum][maxvalue]);
}
}
UVA 624 CD 0-1背包问题
最新推荐文章于 2020-03-06 12:14:40 发布