dp 状态压缩

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cmath>
  4. #include <map>
  5. #include <set>
  6. #include <queue>
  7. #include <stack>
  8. #include <vector>
  9. #include <sstream>
  10. #include <string>
  11. #include <cstring>
  12. #include <algorithm>
  13. #include <iostream>
  14. #define maxn 105
  15. #define INF 0x3f3f3f3f
  16. #define inf 10000000
  17. #define MOD 100000000
  18. #define ULL unsigned long long
  19. #define LL long long
  20.  
  21. using namespace std;
  22.  
  23. int hi[maxn], dp[2][maxn][1<<9][10], n, m, one[1<<9], mh, begin;
  24.  
  25. int countone(int x) {
  26. int ans = 0;
  27. for(int i = 0; i < 8; ++ i)
  28. if(x&(1<<i)) ans ++;
  29. return ans;
  30. }
  31.  
  32. void init() {
  33. begin = mh = 0;
  34. for(int i = 0; i < (1 << 8); ++ i) {
  35. one[i] = countone(i);
  36. }
  37. }
  38.  
  39. int main()
  40. {
  41. int ca = 0;
  42. init();
  43. while(scanf("%d%d", &n, &m) == 2 && n+m) {
  44. // printf("ff: %d\n", num);
  45. begin = mh = 0;
  46. for(int i = 0; i < n; ++ i) {
  47. scanf("%d", &hi[i]);
  48. hi[i] -= 25;
  49. mh = max(hi[i], mh);
  50. begin |= (1 << hi[i]);
  51. }
  52. mh ++;
  53. int tot = 1<<mh;
  54. for(int i = 0; i <= m; ++ i) {
  55. for(int j = 0; j < tot; ++ j) {
  56. for(int k = 0; k <= mh; ++ k) {
  57. dp[0][i][j][k] = INF;
  58. }
  59. }
  60. }
  61.  
  62. dp[0][0][1<<hi[0]][hi[0]] = 1;
  63. dp[0][1][0][mh] = 0;
  64. int now, pre;
  65. for(int i = 1; i < n; ++ i) {
  66. now = i%2;
  67. pre = 1-now;
  68.  
  69. for(int j = 0; j <= m && j <= i+1; ++ j) {
  70. for(int k = 0; k < tot; ++ k) {
  71. for(int q = 0; q <= mh; ++ q) {
  72. dp[now][j][k][q] = INF;
  73. }
  74. }
  75. }
  76.  
  77. for(int j = 0; j <= m && j <= i; ++ j) {
  78. for(int k = 0; k < tot; ++ k) {
  79. for(int q = 0; q <= mh; ++ q) {
  80. if(dp[pre][j][k][q] == INF) continue;
  81. int nowk = k|(1<<hi[i]);
  82. if(j < m) dp[now][j+1][k][q] = min(dp[now][j+1][k][q], dp[pre][j][k][q]);
  83. if(hi[i] == q) {
  84. dp[now][j][k][q] = min(dp[now][j][k][q], dp[pre][j][k][q]);
  85. }
  86. else {
  87. dp[now][j][nowk][hi[i]] = min(dp[now][j][nowk][hi[i]], dp[pre][j][k][q]+1);
  88. }
  89. }
  90. }
  91. }
  92. }
  93.  
  94. int ans = n;
  95. for(int i = 0; i <= m; ++ i) {
  96. for(int j = 0; j < tot; ++ j) {
  97. for(int k = 0; k < mh; ++ k) {
  98. int st = begin^j;
  99. ans = min(ans, one[st]+dp[now][i][j][k]);
  100. }
  101. }
  102. }
  103.  
  104. printf("Case %d: %d\n\n", ++ca, ans);
  105. }
  106. return 0;
  107. }

  

hdu 3237的更多相关文章

  1. HDU 3237 Tree(树链剖分)(线段树区间取反,最大值)

    Tree Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 9123   Accepted: 2411 Description ...

  2. HDU 3966 & POJ 3237 & HYSBZ 2243 树链剖分

    树链剖分是一个很固定的套路 一般用来解决树上两点之间的路径更改与查询 思想是将一棵树分成不想交的几条链 并且由于dfs的顺序性 给每条链上的点或边标的号必定是连着的 那么每两个点之间的路径都可以拆成几 ...

  3. HDU 3966 & POJ 3237 & HYSBZ 2243 & HRBUST 2064 树链剖分

    树链剖分是一个很固定的套路 一般用来解决树上两点之间的路径更改与查询 思想是将一棵树分成不想交的几条链 并且由于dfs的顺序性 给每条链上的点或边标的号必定是连着的 那么每两个点之间的路径都可以拆成几 ...

  4. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. BZOJ 3237: [Ahoi2013]连通图

    3237: [Ahoi2013]连通图 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1161  Solved: 399[Submit][Status ...

  6. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  7. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  8. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

随机推荐

  1. 系统设计摘录CAP

    系统架构设计理论与原则 这里主要介绍几种常见的架构设计理论和原则,常见于大中型互联系统架构设计. (一).CAP理论 1.什么是CAP 所谓CAP,即一致性(Consistency).可用性(Avai ...

  2. Java Web项目,Android和微信小程序的初始页面配置

    Java Web项目 我们在Eclipse里开了Java Web项目之后,Run As Tomcat或者Apache服务器,本地运行,如果直接用http://localhost:8080访问项目,会发 ...

  3. vs code 插件list

    vs code 插件list

  4. JavaScript设计模式基础之面向对象的JavaScript(一)

    动态语言类型与鸭子类型 此内容取自JavaScript设计模式与开发实践一书 编程语言按照数据类型大体可以分为2类,一类就是静态类型语言,另一类则是动态类型语言 静态类型语言也可以称之为编译语言,而动 ...

  5. Jenkins出现 {"changed": false, "msg": "mkdir: cannot create directory ‘/root/.ansible/tmp/ansible-tmp-1552390265.8-253945919613076’: No space left on device\n", "unreachable": true}

    之前部署Jenkins没有遇到过这个问题,百度也找不到相关内容,无奈用过google翻译了一下,显示内存不足,上到服务器查询df -h 发现use% 100% 由于日志等文件导致服务器磁盘空间满了,引 ...

  6. java 生成二维码工具

    二维码生成 Gitee:https://gitee.com/search?utf8=%E2%9C%93&search=qrext4j&group_id=&project_id= ...

  7. linux网络原理

    1.ipconfig命令使用 显示所有正在启动的网卡的详细信息或设定系统中网卡的IP地址. 某一块网卡信息 打开或者关闭某一块网卡 2.ifup和ifdown ifup和ifdown分别是加载网卡信息 ...

  8. (一)Robot Framework安装

    准备工作: Python 2.7 (目前不能良好支持python3) pip 和 setuptools (Python 的套件管理程式,最新版的Python 2.7.16已包含) Robot Fram ...

  9. mybatis完整sql调试

    问题描述 在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们.但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql ...

  10. Java线程和多线程(二)——对象中的wait,notify以及notifyAll方法

    Java对象中的wait,notify以及notifyAll方法 在Java的Object类中包含了3个final的方法,这三个方法允许线程来交流资源是否被锁定.这三个方法就是wait(),notif ...