[Swust OJ 581]--彩色的石子(状压dp)
题目链接:http://acm.swust.edu.cn/problem/0581/
最少的石子,使得没有两个相同颜色的石子之间含有其它的颜色
1<=k<=5,第二行就是那m个石子的颜色,用1到k表示,最后输入0 0表示
程序结束。
|
10 3
2 1 2 2 1 1 3 1 3 3
0 0
|
| 2 |
for (L = ; L < k; L++){
if (L != x && dp[j | ( << x)][x] < dp[j][L] + ) //不含x类的段加一生成的新段如果大于相同状态的值,更新
dp[j | ( << x)][x] = dp[j][L] + ;
}
(5)最后查询所有dp[1<<k-1][i]状态下的最长可行序列,用总长度减去即可
dp方程总结如下
每输入一个x
if(s&(1<<x)
dp[s][x] = dp[s][x] + 1
else
dp[1<<x|s][x] = max(dp[1<<x|s][x],dp[s][L]+1) L(0,k)
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int m, k, dp[ << ][];
//dp[][k] 二进制每一位对应含有第k类石子,表示以第k类石子结尾含有1<<5每一位对应下石子的最大值
while (cin >> m >> k, m || k){
int i, x, j, L, t = << k, maxn = ;
memset(dp, , sizeof(dp));
for (i = ; i < m; i++){
cin >> x;
x--;
for (j = ; j < t; j++){
if (j&( << x)) //对于前面也是以x类石子结尾的最大值直接加1
dp[j][x]++;
}
for (j = ; j < t; j++){
if (!(j&( << x))) //前面不含x类石子
for (L = ; L < k; L++){
if (L != x && dp[j | ( << x)][x] < dp[j][L] + ) //不含x类的段加一生成的新段如果大于相同状态的值,更新
dp[j | ( << x)][x] = dp[j][L] + ;
}
}
}
for (i = ; i<k; i++)
if (dp[( << k) - ][i]>maxn)
maxn = dp[( << k) - ][i];
cout << m - maxn << endl;
}
return ;
}
[Swust OJ 581]--彩色的石子(状压dp)的更多相关文章
- Light OJ 1011 - Marriage Ceremonies(状压DP)
题目大意: 有N个男人,和N个女人要互相匹配,每个男人和每个女人有个匹配值. 并且匹配只能是1对1的. 问所有人都匹配完成,最大的匹配值是多少? 状压DP,暴力枚举就OK了, 这个题目略坑,因为他 ...
- power oj 2480 放积木[二进制状压DP]
题目链接[https://www.oj.swust.edu.cn/problem/show/2480] 题意:中文题目. 题解:二进制状态转移+坏点判断. #include<cstdio> ...
- 江南OJ 1151 - 还是晒太阳 - [状压DP]
题目链接:校内OJ的题目,就不放链接了. PS.可以说是本次9月月赛唯一的一道有一定难度的题目了. 题解: 考虑状压DP,假设 $sta$ 是一个二进制数,代表当前 $n$ 个人有几个是在队伍里的,剩 ...
- HDU 5067 Harry And Dig Machine(状压DP)(TSP问题)
题目地址:pid=5067">HDU 5067 经典的TSP旅行商问题模型. 状压DP. 先分别预处理出来每两个石子堆的距离.然后将题目转化成10个城市每一个城市至少经过一次的最短时间 ...
- 2018.08.29 NOIP模拟 movie(状压dp/随机化贪心)
[描述] 小石头喜欢看电影,选择有 N 部电影可供选择,每一部电影会在一天的不同时段播 放.他希望连续看 L 分钟的电影.因为电影院是他家开的,所以他可以在一部电影播放过程中任何时间进入或退出,当然他 ...
- bjtu 1846. Infinity的装备[状压dp+dfs/bfs]
https://citel.bjtu.edu.cn/acm/oj/problem/1846 1846. Infinity的装备 时间限制 1000 ms 内存限制 64 MB 题目描述 “测试服终于下 ...
- 算法复习——状压dp
状压dp的核心在于,当我们不能通过表现单一的对象的状态来达到dp的最优子结构和无后效性原则时,我们可能保存多个元素的有关信息··这时候利用2进制的01来表示每个元素相关状态并将其压缩成2进制数就可以达 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
随机推荐
- 【Windows 8 Store App】学习三:HTTP
原文 http://www.cnblogs.com/java-koma/archive/2013/05/22/3093309.html 1,HttpClient Win 8提供了System.Net. ...
- C#中经常使用的几种读取XML文件的方法
XML文件是一种经常使用的文件格式,比如WinForm里面的app.config以及Web程序中的web.config文件,还有很多重要的场所都有它的身影.Xml是Internet环境中跨平台的,依赖 ...
- 30款基本UX工具 - 用户测试与反馈工具
日期:2013-9-5 来源:GBin1.com 在上一篇30款基本UX工具 - 思维流程工具 & 原型工具中,我们提到了10款用于头脑风暴和原型创建的工具,用于帮助我们在用户体验上可以做的 ...
- Unity3D-第一视角射击游戏
一.新建关卡 File,Save Scene,File,New Scene,File,Save Scene as... ,Level02.unity 1.建立场景 从Assets中拖放场景模型到Hie ...
- css引入讲解及media
引用Css的几种方式: 一.@import <style type="text/css" media="screen"> @import url(& ...
- ORACLE查看当前连接用户的权限信息或者角色信息
关于当前用户的相关信息,可以通过如下语句找到: SQL> select * from all_objects where object_name like 'SESSION%'; OWNER O ...
- 一个人的旅行(用小技巧转化为dijkstra算法)
注意: 1:因为两点之间可能有多条路,所以更新路径长度的时候做一次判断 if(time < mat[a][b]) mat[a][b] = mat[b][a] = time; 2:因为主函数中的数 ...
- TCP的流量控制
TCP协议作为一个可靠的面向字节流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现. 要区分TCP的流量控制和拥塞控制: 流量控制是发送方的发送数据的速 ...
- hdu 1806 Frequent values 线段树
题目链接 给一个非递减数列, n个数, m个询问, 每个询问给出区间[L, R], 求这个区间里面出现次数最多的数的次数. 非递减数列, 这是最关键的一个条件... 需要保存一个区间最左边的数, 最右 ...
- 学会了 C 语言真的可以开发出很多东西吗?
马里奥碰到花朵就变身. 什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有.什么是花?一个 16 × 16 的正方形.什么是「变身」?把马里奥这个方块里面代表衣 ...