UVA--624 CD(01背包+路径输出)
2024-09-21 11:48:37
题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=565
分析:题目是一个01背包问题。但是增加了路径输出。
由于路径,所以才有二维递推的形式。
dp[i,j]=max{ dp[i-1,j], dp[i-1,j-m[i]]+m[i]}
在输出集合的时候,如果dp[i,j]==dp[i-1,j],那么表明第i个物品是没有选入的。
采用的逆推的形式。
#include<stdio.h>
#include<string.h>
int C,dp[21][100000];
int main()
{
int N,m[22];
while (scanf("%d%d",&C,&N)!=EOF)
{
for(int i=1;i<=N;i++)
scanf("%d",&m[i]);
for(int j=0;j<=C;j++)
{
if(j>=m[1]) dp[1][j]=m[1];
else dp[1][j]=0;
}
//递推
for(int i=2;i<=N;i++)
for(int j=0;j<=C;j++)
{
if(j>=m[i]&&dp[i-1][j]<dp[i-1][j-m[i]]+m[i])
dp[i][j]=dp[i-1][j-m[i]]+m[i];
else
dp[i][j]=dp[i-1][j];
}
//输出集合,倒推
int i=N,j=C;
while(i)
{
if(dp[i-1][j]!=dp[i][j])
{
printf("%d ",m[i]);
j-=m[i];
}
i--;
}
printf("sum:%d\n",dp[N][C]);
}
return 0;
}
最新文章
- Python黑帽编程 3.3 MAC洪水攻击
- UIScrollView和delegate的通信
- reference
- C++11新特性总结 (一)
- CocoaPods安装以及相关问题解决
- linux笔记六-------文件权限设置
- [PCL]4 PCL中图像匹配的几个类图
- Watch The Movie
- localhost访问不了
- win7建立无线wifi热点的几个常见的问题
- mysql初学
- IEnumerable实践应用
- AVFoundation自定义录制视频
- Python 的黏包问题
- Ubuntu 14.04 LTS 火狐浏览器中,鼠标选择文字被删除的解决办法
- arduino 串口数据啊按字节分析
- 【LOJ】#2275. 「JXOI2017」颜色
- active admin常用配置
- Python之匿名函数(filter,map,reduce)
- JQ 知识点集合
热门文章
- pop&;dismiss
- css----less预处理器
- SpringCloudBus
- 日志框架一logback配置和使用
- 各种版本mysql驱动包下载地址
- (转)谈谈Android中的Rect类——奇葩的思维
- iOS开发之SceneKit框架--SCNAction.h
- hexo next中遇到的bug,引发出的关于jquery中click()函数和on("click",function())的区别
- npm使用入门
- LightOJ-1007-Mathematically Hard-欧拉函数打表+前缀和+预处理