您的位置:首页 > 其它

【uva】624 CD【背包记录路径】

2016-06-29 10:43 225 查看
题意:

    背包+路径记录

题解:

    用一个vis[i][j]记录容量为j的背包里面有没有用到过i物品,物品是倒着放的,具体实现看代码

#include<cstdio>
#include<cstring>
using namespace std;
const int N=10005;
int cd[25],dp
,v[25];
bool vis[25]
;
int main()
{
int i,j,n,m;
while(scanf("%d",&m)!=EOF){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&v[i]);
memset(vis,0,sizeof(vis));
memset(dp,0,sizeof(dp));
for(i=n;i>=1;i--){
for(j=m;j>=v[i];j--){
if(dp[j-v[i]]+v[i]>dp[j]){
vis[i][j]=1;
dp[j]=dp[j-v[i]]+v[i];
}
}
}
for(i=1,j=dp[m];i<=n&&j>0;i++)
if(vis[i][j]){
printf("%d ",v[i]),j-=v[i];
}
printf("sum:%d\n",dp[m]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: