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. php中include_path配置

    在php.ini中可配置include_path来达到在任何文件中都可以直接引入该目录下文件 include_path = ".:/usr/share/php:/var/www/phpxwl ...

  2. SQL系列学习 存储过程&事物语法

    /*学习事物基本语法*/ /*增加课室名的唯一索引*/ ALTER table class add constraint uni_ClassName unique(name) /*创建存储过程,其中增 ...

  3. SQL (一)定义变量以及变量赋值

    1.定义变量:declare @name varchar(20)  用declare定义一个名字为name的字符串类型的变量,变量前面需要加@ 2.为变量赋值:set @name = '%奥迪%' , ...

  4. Python 循环结构语句

    1.for循环:计次循环 2.while循环:条件循环 3.嵌套循环 4.跳转语句 一.for循环的使用 1.进行数值循环 利用数值循环输出三次‘你好’: >>> for i in ...

  5. New Arrival MB SD Connect Compact 5 (MB SD C4) Star Diagnosis

    MB SD Connect Compact 5 has same function as SD C4 but with new design, support both cars and trucks ...

  6. Navicat将表转为模型

    右键数据库 -> 逆向数据库到模型

  7. process data

    # version 1.0def connect_mysql(sql, oper_type="select", data_l=None): conn = pymysql.conne ...

  8. (15) openssl签署和自签署证书的多种实现方式

    1.采用自定义配置文件的实现方法 1.1 自建CA 自建CA的机制:1.生成私钥:2.创建证书请求:3.使用私钥对证书请求签名. 由于测试环境,所以自建的CA只能是根CA. 所使用的配置文件如下: [ ...

  9. linux 定时任务(注意事项)

    1.在要执行的脚本中,执行其他脚本时,需要加入其他脚本需要的环境变量. 2.路径要写全,绝对路径.命令要写全,使用绝对路径的方式.

  10. 阿里云配置tomcat后不能访问问题

    问题:使用阿里云centos 7.2配置好tomcat后,启动时间9分多钟,停在webapps下的manage这里近9分多钟 解决:进入 /usr/local/jdk1.8.0_144/jre/lib ...