dp 状态压缩

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <sstream>
#include <string>
#include <cstring>
#include <algorithm>
#include <iostream>
#define maxn 105
#define INF 0x3f3f3f3f
#define inf 10000000
#define MOD 100000000
#define ULL unsigned long long
#define LL long long using namespace std; int hi[maxn], dp[2][maxn][1<<9][10], n, m, one[1<<9], mh, begin; int countone(int x) {
int ans = 0;
for(int i = 0; i < 8; ++ i)
if(x&(1<<i)) ans ++;
return ans;
} void init() {
begin = mh = 0;
for(int i = 0; i < (1 << 8); ++ i) {
one[i] = countone(i);
}
} int main()
{
int ca = 0;
init();
while(scanf("%d%d", &n, &m) == 2 && n+m) {
// printf("ff: %d\n", num);
begin = mh = 0;
for(int i = 0; i < n; ++ i) {
scanf("%d", &hi[i]);
hi[i] -= 25;
mh = max(hi[i], mh);
begin |= (1 << hi[i]);
}
mh ++;
int tot = 1<<mh;
for(int i = 0; i <= m; ++ i) {
for(int j = 0; j < tot; ++ j) {
for(int k = 0; k <= mh; ++ k) {
dp[0][i][j][k] = INF;
}
}
} dp[0][0][1<<hi[0]][hi[0]] = 1;
dp[0][1][0][mh] = 0;
int now, pre;
for(int i = 1; i < n; ++ i) {
now = i%2;
pre = 1-now; for(int j = 0; j <= m && j <= i+1; ++ j) {
for(int k = 0; k < tot; ++ k) {
for(int q = 0; q <= mh; ++ q) {
dp[now][j][k][q] = INF;
}
}
} for(int j = 0; j <= m && j <= i; ++ j) {
for(int k = 0; k < tot; ++ k) {
for(int q = 0; q <= mh; ++ q) {
if(dp[pre][j][k][q] == INF) continue;
int nowk = k|(1<<hi[i]);
if(j < m) dp[now][j+1][k][q] = min(dp[now][j+1][k][q], dp[pre][j][k][q]);
if(hi[i] == q) {
dp[now][j][k][q] = min(dp[now][j][k][q], dp[pre][j][k][q]);
}
else {
dp[now][j][nowk][hi[i]] = min(dp[now][j][nowk][hi[i]], dp[pre][j][k][q]+1);
}
}
}
}
} int ans = n;
for(int i = 0; i <= m; ++ i) {
for(int j = 0; j < tot; ++ j) {
for(int k = 0; k < mh; ++ k) {
int st = begin^j;
ans = min(ans, one[st]+dp[now][i][j][k]);
}
}
} printf("Case %d: %d\n\n", ++ca, ans);
}
return 0;
}

  

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. jmeter+ant+jenkins

    前提:需要先配置下面两个环境,严格按照本人的配置去配,要不然后面你会看不懂 (1)ant+jmeter集成:http://blog.csdn.net/qq_23101033/article/detai ...

  2. liunx 修改IP地址

    1.安装centos系统,这里就不详细说明了. 2.进入到 vi /etc/sysconfig/network-scripts/ifcfg-eth0      后面的名称有些可能不同 其中,有些可能没 ...

  3. 关于mybatis的一些用法

    resultMap 的用法 <resultMap id="唯一标识" type="映射的pojo类"> <id column = " ...

  4. 1-1 编程基础 GCC程序编译

    GCC简介      Linux系统下的gcc是GNU推出的强大.性能优越的多平台编译器,是GNU的代表作之一.gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平局效率要高20 ...

  5. 4.关于while循环的基础小练习

    1)使用while.if循环输入123456 8910 count = 0 while count < 10: count += 1 if count == 7: print('') else: ...

  6. 888. Fair Candy Swap@python

    Alice and Bob have candy bars of different sizes: A[i] is the size of the i-th bar of candy that Ali ...

  7. opencv加载图片和视频

    一.加载图片: 1.先放一段最简单的加载图片的代码 import cv2 as cv #引用opencv库image = "D:/Image/test.jpg" #确定图片所在路径 ...

  8. python虚拟环境的搭建及作用

    Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpreter,而不用与其他Python程序共享统一个library和interpreter.虚拟环境的好处是 ...

  9. kvm客户机存储方式

    前面介绍了存储的配置和qemu-img工具来管理镜像,在QEMU/KVM中,客户机镜像文件可以由很多种方式来构建,其中几种如下: 1) 本地存储的客户机镜像文件. 2) 物理磁盘或磁盘分区. 3) L ...

  10. redis:哨兵集群配置

    最少配置1主2从3哨兵 一.引言 上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...