题目传送门

  1. /*
  2. 题意:已知丢失若干卡片后剩余的总体积,并知道原来所有卡片的各自的体积,问丢失的卡片的id
  3. DP递推:首先从丢失的卡片的总体积考虑,dp[i] 代表体积为i的方案数,从dp[0] = 1递推,累加的条件是dp[j]上一个状态已经有方案,
  4. 若dp[w] > 1表示有多种方案,外加p[j+a[i]] = i的记录路径数组
  5. 我开始用了暴力DFS超时,dp不会写,看了题解发现是个递推,有点像01背包的题目:)
  6. 详细解释:http://blog.csdn.net/neko01/article/details/10033787
  7. */
  8. #include <cstdio>
  9. #include <iostream>
  10. #include <algorithm>
  11. #include <cstring>
  12. #include <string>
  13. #include <cmath>
  14. using namespace std;
  15. const int MAXN = 1e2 + ;
  16. const int MAXM = 1e6 + ;
  17. const int INF = 0x3f3f3f3f;
  18. int a[MAXN];
  19. int p[MAXM];
  20. int ans[MAXN];
  21. int dp[MAXM];
  22. int main(void) //URAL 1244 Gentlemen
  23. {
  24. //freopen ("L.in", "r", stdin);
  25. int w, n, sum;
  26. while (scanf ("%d", &w) == )
  27. {
  28. sum = ;
  29. scanf ("%d", &n);
  30. for (int i=; i<=n; ++i)
  31. {
  32. scanf ("%d", &a[i]); sum += a[i];
  33. }
  34. memset (p, , sizeof (p));
  35. memset (dp, , sizeof (dp));
  36. dp[] = ; w = sum - w;
  37. for (int i=; i<=n; ++i)
  38. {
  39. for (int j=w-a[i]; j>=; --j)
  40. {
  41. if (dp[j])
  42. {
  43. if (!dp[j+a[i]]) p[j+a[i]] = i;
  44. dp[j+a[i]] += dp[j];
  45. }
  46. }
  47. }
  48. int cnt = ;
  49. if (dp[w] == ) puts ("");
  50. else if (dp[w] == )
  51. {
  52. for (int i=n; i>=; --i)
  53. {
  54. if (p[w] == i)
  55. {
  56. ans[++cnt] = i;
  57. w -= a[i];
  58. }
  59. }
  60. for (int i=cnt; i>=; --i)
  61. {
  62. printf ("%d%c", ans[i], (i==) ? '\n' : ' ');
  63. }
  64. }
  65. else puts ("-1");
  66. }
  67. return ;
  68. }

DP URAL 1244 Gentlemen的更多相关文章

  1. 递推DP URAL 1244 Gentlemen

    题目传送门 /* 题意:给出少了若干卡片后的总和,和原来所有卡片,问少了哪几张 DP:转化为少了的总和是否能有若干张卡片相加得到,dp[j+a[i]] += dp[j]; 记录一次路径,当第一次更新的 ...

  2. ural 1244. Gentlemen

    1244. Gentlemen Time limit: 0.5 secondMemory limit: 64 MB Let's remember one old joke: Once a gentle ...

  3. URAL 1244. Gentlemen(DP)

    题目链接 这题不难啊...标记一下就行了.表示啥想法也没有. #include <cstring> #include <cstdio> #include <string& ...

  4. URAL 1244. Gentlemen (DP)

    题目链接 题意 : 给出一幅不完全的纸牌.算出哪些牌丢失了. 思路 : 算是背包一个吧.if f[j]>0  f[j+a[i]] += f[j];然后在记录一下路径. #include < ...

  5. 递推DP URAL 1081 Binary Lexicographic Sequence

    题目传送门 题意:问第k个长度为n的01串是什么(不能有相邻的1) 分析:dp[i][0/1] 表示前i个,当前第i个放1或0的方案数,先预处理计算,dp[i][1]只能有dp[i-1][0]转移过来 ...

  6. 递推DP URAL 1586 Threeprime Numbers

    题目传送门 /* 题意:n位数字,任意连续的三位数字组成的数字是素数,这样的n位数有多少个 最优子结构:考虑3位数的数字,可以枚举出来,第4位是和第3位,第2位组成的数字判断是否是素数 所以,dp[i ...

  7. 递推DP URAL 1017 Staircases

    题目传送门 /* 题意:给n块砖头,问能组成多少个楼梯,楼梯至少两层,且每层至少一块砖头,层与层之间数目不能相等! 递推DP:dp[i][j] 表示总共i块砖头,最后一列的砖头数是j块的方案数 状态转 ...

  8. 递推DP URAL 1260 Nudnik Photographer

    题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...

  9. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

随机推荐

  1. LR调用DLL(加密测试等)

    利用LoadRunner实现加密测试,哇咔咔2015-05-12 10:17:06标签:编译器 加密 用户在进行LoadRunner打压时,有时候请求的参数是加密的,而加密的法则是通过调用一段DLL来 ...

  2. 【Python】Django支持事务方式

    代码: with transaction.atomic(): for i in xrange(int(svc_instance_num)): tmp_fileprotect_svc_instance ...

  3. #define 的一些用法 以及 迭代器的 [] 与 find()函数的区别

    #include "stdafx.h" #include <map> #include <string> #include <iostream> ...

  4. Android Studio在线安装Android SDK注意事项

    由于使用的Android studio自带了sdk23,然而其它版本的sdk并没有安装:这些天由于需要用到低版本的sdk,因而使用Android SDK Manager进行相应的更新.开始的时候老是无 ...

  5. mysql 恢复备份

    1.在my.cnf 文件中增加以下配置 log-bin=/var/lib/mysql/mysql-binloglog-bin-index = /var/lib/mysql/mysql-binlog 2 ...

  6. Java for LeetCode 152 Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  7. 6.django笔记之orm

    作者:刘耀 一.Django-orm 关系对象映射(Object Relational Mapping,简称ORM). 2.在django里 我们写的类表示数据库的表 如果根据这个类创建的对象是数据库 ...

  8. Lubuntu下配置Python开发环境

    安装完系统必须要做的几件事: 一.更新软件    (如果是通过最新版镜像安装,可无视此步骤)    1.选择速度比较快的源,默认的源速度不一定快.二.配置终端    1.设置终端背景,前景色,透明度  ...

  9. (转)Android中的Shape使用总结

    http://blog.csdn.net/bear_huangzhen/article/details/24488337 在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的 ...

  10. ****CSS各种居中方法

    水平居中的text-align:center 和 margin:0 auto   这两种方法都是用来水平居中的,前者是针对父元素进行设置而后者则是对子元素.他们起作用的首要条件是子元素必须没有被flo ...