hdu 3237
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的更多相关文章
- HDU 3237 Tree(树链剖分)(线段树区间取反,最大值)
Tree Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 9123 Accepted: 2411 Description ...
- HDU 3966 & POJ 3237 & HYSBZ 2243 树链剖分
树链剖分是一个很固定的套路 一般用来解决树上两点之间的路径更改与查询 思想是将一棵树分成不想交的几条链 并且由于dfs的顺序性 给每条链上的点或边标的号必定是连着的 那么每两个点之间的路径都可以拆成几 ...
- HDU 3966 & POJ 3237 & HYSBZ 2243 & HRBUST 2064 树链剖分
树链剖分是一个很固定的套路 一般用来解决树上两点之间的路径更改与查询 思想是将一棵树分成不想交的几条链 并且由于dfs的顺序性 给每条链上的点或边标的号必定是连着的 那么每两个点之间的路径都可以拆成几 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- BZOJ 3237: [Ahoi2013]连通图
3237: [Ahoi2013]连通图 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1161 Solved: 399[Submit][Status ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
随机推荐
- 系统设计摘录CAP
系统架构设计理论与原则 这里主要介绍几种常见的架构设计理论和原则,常见于大中型互联系统架构设计. (一).CAP理论 1.什么是CAP 所谓CAP,即一致性(Consistency).可用性(Avai ...
- Java Web项目,Android和微信小程序的初始页面配置
Java Web项目 我们在Eclipse里开了Java Web项目之后,Run As Tomcat或者Apache服务器,本地运行,如果直接用http://localhost:8080访问项目,会发 ...
- vs code 插件list
vs code 插件list
- JavaScript设计模式基础之面向对象的JavaScript(一)
动态语言类型与鸭子类型 此内容取自JavaScript设计模式与开发实践一书 编程语言按照数据类型大体可以分为2类,一类就是静态类型语言,另一类则是动态类型语言 静态类型语言也可以称之为编译语言,而动 ...
- 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% 由于日志等文件导致服务器磁盘空间满了,引 ...
- java 生成二维码工具
二维码生成 Gitee:https://gitee.com/search?utf8=%E2%9C%93&search=qrext4j&group_id=&project_id= ...
- linux网络原理
1.ipconfig命令使用 显示所有正在启动的网卡的详细信息或设定系统中网卡的IP地址. 某一块网卡信息 打开或者关闭某一块网卡 2.ifup和ifdown ifup和ifdown分别是加载网卡信息 ...
- (一)Robot Framework安装
准备工作: Python 2.7 (目前不能良好支持python3) pip 和 setuptools (Python 的套件管理程式,最新版的Python 2.7.16已包含) Robot Fram ...
- mybatis完整sql调试
问题描述 在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们.但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql ...
- Java线程和多线程(二)——对象中的wait,notify以及notifyAll方法
Java对象中的wait,notify以及notifyAll方法 在Java的Object类中包含了3个final的方法,这三个方法允许线程来交流资源是否被锁定.这三个方法就是wait(),notif ...