2012世界末日
Time Limit: 1000 MS Memory Limit: 65535 K
Total Submit: 38(16 users) Total Accepted: 12(11 users) Rating:  Special Judge: No
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背包+反路径输出】相关推荐

  1. 话里话外:2012世界末日“pk”泰坦尼克号

    转帖:张雪--2012世界末日"pk"泰坦尼克号 <2012世界末日>是灾难来临时的大逃亡,用四个字概括就是"震撼眼球".    <泰坦尼克号 ...

  2. 类似百度的2012世界末日地震效果

    类似百度的2012世界末日地震效果,纯属娱乐~ 代码下载地址:http://download.csdn.net/detail/evangel_z/4252518 修改版代码下载地址:http://do ...

  3. 在百度搜索2012世界末日所展现的地震效果的源代码

    昨天在同学群里收到这样的信息:[重磅消息:只要在百度搜索"2012世界末日",你的电脑显示器页面将会震动,出现地震山摇的状况,然后会有一张"船票"飘然而出 ]. ...

  4. [信息图表]2012世界末日?科学迷信众说纷纭

    2012世界末日?科学还是迷信?众说纷纭,我们用图文信息视图揭开其中秘密吧.探索关于2012年的神话,玛雅预言,地磁逆转,长历法,意识转变,创造之神,银河系对齐,昼夜岁差,Nibiru流氓行星,太阳风 ...

  5. 2012世界末日其实是个大骗局【转】

    网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,2012年12月21日是"世界末日",这一天当黑暗降临后,黎明便 永远不 会到来.好像2012世界末日这个 ...

  6. 中国国家天文:2012世界末日传言纯属无稽之谈

    图为2011年6月7日的一次日冕物质抛射. 大家书桌上的2011年日历应该翻完最后一页了吧?虽然据说2012年12月21日冬至是"世界末日",但是您还是应该买一本新日历,因为201 ...

  7. 解密:2012世界末日其实是个大骗局

    网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,2012年12月21日是"世界末日",这一天当黑暗降临后,黎明便永远不 会到来.好像2012世界末日这个说 ...

  8. 详解---“2012世界末日”大骗局

     网上一度流传最快的古玛雅文明预言2012世界末日信息,根据玛雅文明的记载,<?xml:namespace prefix = st1 ns = "urn:schemas-microso ...

  9. 百度用心良苦 搜索页面惊现2012世界末日特效

    2012年是传说中的世界末日,恰逢周日(4月 22 日)就是世界地球日(World Earth Day),百度借此良机发起了一项有趣的活动:2012拯救地球. 在百度中搜索"拯救地球&quo ...

最新文章

  1. PHP Memcached应用实现代码
  2. 《精通Unix下C语言编程与项目实践》目录
  3. Linux 多线程同步机制:互斥量、信号量、条件变量
  4. 计算机网络spoc作业4
  5. 解决ionic切换路由后,不继承tab路由,没有返回按钮问题
  6. mysql 报错 Specified key was too long; max key length is 767 bytes,开启系统变量:innodb_large_prefix
  7. qq浏览器翻译功能启用划词插件教程
  8. mysql mvcc undo_Mysql Innodb中undo-log和MVCC多版本一致性读 的实现
  9. ios 的ASIHTTPRequest学习
  10. 计算机软考高级科目试题及答案,软考高级哪个含金量高 2018计算机软考信息系统项目管理师单选试题及答案...
  11. 【Proteus仿真】Arduino UNO +WS2812玩转霓虹灯
  12. 家用风扇控制系统c语言程序设计,数字风扇控制系统的设计
  13. Python shift()
  14. Linux常用命令讲解(pdf在我的资源可以下载,有图)
  15. 存算分离后,VxRail动态计算节点构建虚拟化更给力
  16. 一万五千字讲清Java当中Collection下的接口
  17. OrCADPADS9.5Cadence学习记录
  18. VMware Workstation实例二:单IP的虚拟机提供外网访问
  19. php 文件图片上传
  20. 股票自选股基本函数大全-1

热门文章

  1. IQueryable底层是如何读取数据的
  2. mysql如何远程访问_mysql开启远程连接的方法
  3. 移动端Android真机上 scrollTop一直为0的解决方案
  4. 经典:头像与昵称描述的位置组合
  5. Hive表结构操作(增加列,删除列,修改列,移动列)
  6. 不协调的世界(2)-肉猪养殖
  7. 社会主义市场经济的的理论与实践一
  8. 智能客服系统如何帮助企业提高客户满意度?
  9. java转义字符(java转义字符对照表)
  10. PCL点云的创建、访问与转换