Hrbust 1836 2012世界末日【01背包+反路径输出】
2012世界末日 | ||||||
|
||||||
Description | ||||||
2012年12月21日,世界末日即将到来。有一些富豪想着把钱都捐出去或许可以积善,使自己在世界末日这天幸免于难。他们按照约定按自己的体重铸成了不同重量的金块,装在车里开进了仓库里等着分给有需要的人。 但是在夜黑风高的晚上,有一些小偷把金块偷走了。等富豪们把钱捐出去后发现少了一卡车的金块(一卡车的金块数量为k )。富豪们赶紧报警,警察问富豪少了多少金块。但是富豪们只能说出少了一卡车的金块,却说不出少了的每个金块的重量。 你能帮助警察找出少了的金块麽? |
||||||
Input | ||||||
发生了多起金块被盗事件。 第一行是每一起案件中最后捐赠出去的金块总重量W。 第二行是一个整数n(1 <= n <= 100)表示这一起案件中有多少个富豪参与了捐赠。 接下来一行有n个整数wi (1 <= wi <= 1000),表示每一个富豪的体重。 |
||||||
Output | ||||||
如果无解就输出0。有多解就输出 -1。否则按照升序输出被偷走的是第几个富豪的金块,相邻的编号之间用一个空格隔开。 | ||||||
Sample Input | ||||||
270 4 100 110 170 200 |
||||||
Sample Output | ||||||
2 4 | ||||||
Hint | ||||||
注意: 如果没有被偷走任何黄金,则输出0. | ||||||
Source | ||||||
2013 Summer Holiday Summarize | ||||||
Author | ||||||
曾卓敏 |
思路:
1、经典的01背包模型,我们设定dp【i】,表示组成总金额数为i的方案数。
那么很显然,我们设定dp【0】=0;
那么有:dp【j】+=dp【j-a【i】】;
2、对于被偷走的黄金。就是总金额-总捐出的金额。
我们对于这部分进行dp,然后过程记录路径,递归输出即可。
Ac代码:
#include<stdio.h>
#include<string.h>
using namespace std;
int a[1000];
int dp[1060000];
int last[1060000];
int pre[1060000];
void print(int tot,int n)
{if(tot!=0){print(last[tot],n);if(tot==n){printf("%d\n",pre[tot]);}else printf("%d ",pre[tot]);}
}
int main()
{int tot;while(~scanf("%d",&tot)){int n;memset(dp,0,sizeof(dp));memset(last,0,sizeof(last));memset(pre,0,sizeof(pre));scanf("%d",&n);for(int i=1; i<=n; i++){scanf("%d",&a[i]);tot-=a[i];}tot=-tot;if(tot==0){printf("0\n");continue;}dp[0]=1;for (int i = 1; i <= n; i++){for (int j = tot - a[i]; j >= 0; j--){if (dp[j] > 0){if (dp[j + a[i]] == 0){dp[j + a[i]] = dp[j];last[j + a[i]] = j;pre[j + a[i]] = i;}elsedp[j + a[i]]++;}}}if(dp[tot]==0){printf("0\n");}else if(dp[tot]>1)printf("-1\n");else{print(tot,tot);}}
}
Hrbust 1836 2012世界末日【01背包+反路径输出】相关推荐
- 话里话外:2012世界末日“pk”泰坦尼克号
转帖:张雪--2012世界末日"pk"泰坦尼克号 <2012世界末日>是灾难来临时的大逃亡,用四个字概括就是"震撼眼球". <泰坦尼克号 ...
- 类似百度的2012世界末日地震效果
类似百度的2012世界末日地震效果,纯属娱乐~ 代码下载地址:http://download.csdn.net/detail/evangel_z/4252518 修改版代码下载地址:http://do ...
- 在百度搜索2012世界末日所展现的地震效果的源代码
昨天在同学群里收到这样的信息:[重磅消息:只要在百度搜索"2012世界末日",你的电脑显示器页面将会震动,出现地震山摇的状况,然后会有一张"船票"飘然而出 ]. ...
- [信息图表]2012世界末日?科学迷信众说纷纭
2012世界末日?科学还是迷信?众说纷纭,我们用图文信息视图揭开其中秘密吧.探索关于2012年的神话,玛雅预言,地磁逆转,长历法,意识转变,创造之神,银河系对齐,昼夜岁差,Nibiru流氓行星,太阳风 ...
- 2012世界末日其实是个大骗局【转】
网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,2012年12月21日是"世界末日",这一天当黑暗降临后,黎明便 永远不 会到来.好像2012世界末日这个 ...
- 中国国家天文:2012世界末日传言纯属无稽之谈
图为2011年6月7日的一次日冕物质抛射. 大家书桌上的2011年日历应该翻完最后一页了吧?虽然据说2012年12月21日冬至是"世界末日",但是您还是应该买一本新日历,因为201 ...
- 解密:2012世界末日其实是个大骗局
网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,2012年12月21日是"世界末日",这一天当黑暗降临后,黎明便永远不 会到来.好像2012世界末日这个说 ...
- 详解---“2012世界末日”大骗局
网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,<?xml:namespace prefix = st1 ns = "urn:schemas-microso ...
- 百度用心良苦 搜索页面惊现2012世界末日特效
2012年是传说中的世界末日,恰逢周日(4月 22 日)就是世界地球日(World Earth Day),百度借此良机发起了一项有趣的活动:2012拯救地球. 在百度中搜索"拯救地球&quo ...
最新文章
- PHP Memcached应用实现代码
- 《精通Unix下C语言编程与项目实践》目录
- Linux 多线程同步机制:互斥量、信号量、条件变量
- 计算机网络spoc作业4
- 解决ionic切换路由后,不继承tab路由,没有返回按钮问题
- mysql 报错 Specified key was too long; max key length is 767 bytes,开启系统变量:innodb_large_prefix
- qq浏览器翻译功能启用划词插件教程
- mysql mvcc undo_Mysql Innodb中undo-log和MVCC多版本一致性读 的实现
- ios 的ASIHTTPRequest学习
- 计算机软考高级科目试题及答案,软考高级哪个含金量高 2018计算机软考信息系统项目管理师单选试题及答案...
- 【Proteus仿真】Arduino UNO +WS2812玩转霓虹灯
- 家用风扇控制系统c语言程序设计,数字风扇控制系统的设计
- Python shift()
- Linux常用命令讲解(pdf在我的资源可以下载,有图)
- 存算分离后,VxRail动态计算节点构建虚拟化更给力
- 一万五千字讲清Java当中Collection下的接口
- OrCADPADS9.5Cadence学习记录
- VMware Workstation实例二:单IP的虚拟机提供外网访问
- php 文件图片上传
- 股票自选股基本函数大全-1