题目链接:http://poj.org/problem?id=1143

题目描述:

代码实现:

  1. #include <iostream>
  2. #include <string.h>
  3. #include <math.h>
  4. #include <algorithm>
  5. #include <stdlib.h>
  6.  
  7. using namespace std;
  8. int dp[<<];
  9. int n;
  10. int a[];
  11. int s[];
  12. //这个函数是把这个二进制数列变成数字,就是将数列压缩成数字来
  13. int getNum(int a[])
  14. {
  15. int res=;
  16. for(int i=;i<=;i++)
  17. {
  18. if(a[i])
  19. res|=;
  20. res<<=;
  21. }
  22. return res;
  23. }
  24. //dfs(a,2)
  25. int dfs(int s[],int st)
  26. {
  27. int v[];
  28. memcpy(v,s,*sizeof(int));//memcpy的函数原型是void *memcpy(void *dest, const void *src, size_t n),其功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
  29. v[st]=;
  30. //把i的倍数,与之前选过的数字之和,都标记成0
  31. for(int i=;i+st<=;i++)
  32. {
  33. if(!v[i])
  34. v[i+st]=;
  35. }
  36. int ss=getNum(v);
  37. //记忆化搜索,这里大幅度提高效率
  38. if(dp[ss]!=)
  39. {
  40. if(dp[ss]>)
  41. return ;
  42. else
  43. return ;
  44. }
  45. for(int i=;i<=;i++)
  46. {
  47. if(v[i]&&!dfs(v,i))
  48. {
  49. dp[ss]=;
  50. return ;
  51. }
  52. }
  53. dp[ss]=-;
  54. return ;
  55. }
  56. int main()
  57. {
  58. int ans[];
  59. int b;
  60. memset(dp,,sizeof(dp));
  61. int cas=;
  62. while(scanf("%d",&n)!=EOF)
  63. {
  64. cas++;
  65. memset(a,,sizeof(a));
  66. if(n==)
  67. break;
  68. for(int i=;i<n;i++)
  69. {
  70. scanf("%d",&b);
  71. a[b]=;
  72. }
  73. int tot=;
  74. for(int i=;i<=;i++)
  75. {
  76. if(a[i]&&!dfs(a,i))
  77. ans[tot++]=i;
  78. }
  79. printf("Test Case #%d\n",cas);
  80. if(tot==)
  81. {
  82. printf("There's no winning move.\n");
  83.  
  84. }
  85. else
  86. {
  87. printf("The winning moves are: ");
  88. for(int i=;i<tot;i++)
  89. {
  90. if(i!=tot-)
  91. printf("%d ",ans[i]);
  92. else
  93. printf("%d\n",ans[i]);
  94. }
  95. }
  96. printf("\n");
  97. }
  98. return ;
  99. }

动态规划状态压缩-poj1143的更多相关文章

  1. [动态规划]状态压缩DP小结

     1.小技巧 枚举集合S的子集:for(int i = S; i > 0; i=(i-1)&S) 枚举包含S的集合:for(int i = S; i < (1<<n); ...

  2. [POJ 2923] Relocation (动态规划 状态压缩)

    题目链接:http://poj.org/problem?id=2923 题目的大概意思是,有两辆车a和b,a车的最大承重为A,b车的最大承重为B.有n个家具需要从一个地方搬运到另一个地方,两辆车同时开 ...

  3. POJ 1185 炮兵阵地(动态规划+状态压缩)

    炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原( ...

  4. ACM学习历程—HDU1584 蜘蛛牌(动态规划 && 状态压缩 || 区间DP)

    Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起 ...

  5. HDOJ-1074(动态规划+状态压缩)

    Doing Homework HDOJ-1074 1.本题主要用的是状态压缩的方法,将每种状态用二进制压缩表示 2.状态转移方程:dp[i|(1<<j)]=min(dp[i|(1<& ...

  6. [ZOJ 3662] Math Magic (动态规划+状态压缩)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3662 之前写过这道题,结果被康神吐槽说代码写的挫. 的确,那时候 ...

  7. 3.4 熟练掌握动态规划——状态压缩DP

    从旅行商问题说起—— 给定一个图,n个节点(n<=15),求从a节点出发,经历每个节点仅一次,最后回到a,需要的最短时间. 分析: 设定状态S代表当前已经走过的城市的集合,显然,S<=(1 ...

  8. 动态规划(状态压缩):BZOJ 2621 [Usaco2012 Mar]Cows in a Skyscraper

      2621: [Usaco2012 Mar]Cows in a Skyscraper Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 303  Sol ...

  9. [ACM_动态规划] 轮廓线动态规划——铺放骨牌(状态压缩1)

    Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...

随机推荐

  1. 坚持:学习Java后台的第一阶段,我学习了那些知识

    最近的计划是业余时间学习Java后台方面的知识,发现学习的过程中,要学的东西真多啊,让我一下子感觉很遥远.但是还好我制定了计划,自己选择的路,跪着也要走完!关于计划是<终于,我还是下决心学Jav ...

  2. 【Linux】基本命令操作

    一.用户操作 1.新增用户 useradd -u 1101 -g zte -d /home/xhs -m xhs --其中,1101,为用户ID,尽量使用500以上的 zte,为用户组 /home/x ...

  3. vue 中axios 的基本配置和基本概念

    axios的基本概念及安装配置方法   ajax:异步请求,是一种无需再重新加载整个网页的情况下,能够更新部分网页的技术 axios:用于浏览器和node.js的基于promise的HTTP客户端 a ...

  4. LeetCode(99):恢复二叉搜索树

    Hard! 题目描述: 二叉搜索树中的两个节点被错误地交换. 请在不改变其结构的情况下,恢复这棵树. 示例 1: 输入: [1,3,null,null,2]   1   /  3   \   2 输出 ...

  5. 【python】正则替换

    正则替换可以使用函数 例如:替换字符串中所有#1.2.3.4#格式中的数字为0 import re def replace(x): def _replace(matched): m = matched ...

  6. 简单的做一个图片上传预览(web前端)

    转载:点击查看原文 在做web项目很多的时候图片都是避免不了的,所以操作图片就成了一个相对比较棘手的问题,其实也不是说很麻烦,只是说上传然后直接预览的过程很恶心,今天简单的做一个处理. 效果预览: & ...

  7. C++ Primer 笔记——类成员指针

    1.当我们初始化一个成员指针或为成员指针赋值时,该指针并没有指向任何数据.成员指针指定了成员而非成员所属的对象,只有当解引用成员指针时,我们才提供对象信息. 2.和普通的函数指针类似,如果成员存在重载 ...

  8. 论文阅读笔记三十八:Deformable Convolutional Networks(ECCV2017)

    论文源址:https://arxiv.org/abs/1703.06211 开源项目:https://github.com/msracver/Deformable-ConvNets 摘要 卷积神经网络 ...

  9. linux 出错 “INFO: task xxxxxx: 634 blocked for more than 120 seconds.”的3种解决方案

    https://blog.csdn.net/electrocrazy/article/details/79377214

  10. JDK1.7 Update14 HotSpot虚拟机GC收集器

    在测试服务器上使用如下命令可以查看当前使用的 GC收集器,当然不止这一个命令可以看到,还有其他一些方式 第三列”=”表示第四列是参数的默认值,而”:=” 表明了参数被用户或者JVM赋值了 [csii@ ...