ZOJ3070-The Colored Stones - 状态压缩dp
来源:互联网 发布:搞笑词语网络流行语言 编辑:程序博客网 时间:2024/06/17 20:22
题目大意:给你一段长为n的序列,每个石头都有一个颜色,一共有m中颜色,你可以每次拿走一块石头,最后这段序列没有一个颜色的石头会被另一个不同颜色的石头隔开,问你最少需要移走多少个石头;
题目解析:最后的序列每种颜色的石头肯定都挤在一起,每次我们加一个石头的时候就需要考虑前面有没有这种颜色的石头,而不需要知道有多少个,所以我们就可以想到用状态压缩;
dp[i][j][k]表示对第i块石头,颜色状态为j,最后一块石头颜色为k的最大序列长度;
代码:
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>using namespace std;int main(){int n,m,dp[110][1<<6][6],x,i,j,k,stone;while(scanf("%d%d",&n,&m)&&(n+m)){memset(dp,0,sizeof(dp));int len = 1<<m;for(int i=1;i<=n;i++){scanf("%d",&x);x--;for(j=0;j<len;j++){if(!(j&(1<<x))){for(k=0;k<m;k++){dp[i][j|(1<<x)][x]=max(dp[i][j|(1<<x)][x],dp[i-1][j][k]+1);dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k]);}}else {for(k=0;k<m;k++){if(k==x){dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k]+1);}else {dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k]);}}}}}stone=0;for(k=0;k<m;k++)for(j=0;j<len;j++)stone=max(stone,dp[n][j][k]);printf("%d\n",n-stone);}return 0;}
0 0
- ZOJ3070-The Colored Stones - 状态压缩dp
- ZOJ3070 POJ2978 Colored stones,压缩状态DP
- [poj 2978]Colored Stones[状态压缩DP]
- 【状压dp】poj2978 Colored stones
- pku 2978 Colored stones(枚举+DP)
- POJ2978-Colored stones(状压dp)
- POJ 2978 Colored stones(状压DP+逆向思维)
- codeforces 424E Colored Jenga (状态压缩,概率dp用hash记忆优化搜索)
- POJ2441 Arrange the Bulls 状态压缩DP
- Arrange the Bulls(poj2441)状态压缩dp
- POJ 2978 Colored stones
- poj2978——Colored stones
- POJ 3311 Hie with the Pie(Floyd+状态压缩DP)
- POJ 3311 Hie with the Pie //状态压缩DP
- poj 2441Arrange the Bulls解题报告-状态压缩dp
- POJ 3311 Hie with the Pie -- TSP 状态压缩dp
- POJ3311 Hie with the Pie(状态压缩dp)
- POJ 3311 Hie with the Pie (状态压缩DP)
- hdu5898odd-even number
- python3中标准库中模块的更名。
- Linux下修改Mysql的用户(root)的密码
- 程序员的成长日记-开篇
- 预处理命令总结
- ZOJ3070-The Colored Stones - 状态压缩dp
- 上架下架,修改js无页面刷新分页搜索
- 多行文本溢出省略号
- [JZOJ3447]摘取作物(SPFA费用流模板)
- September 17th 模拟赛PJ T4 稀有逛超市 Solution
- ZooKeeper中Session超时问题
- ES6学习笔记(二)变量的解构赋值
- day15 python css position
- swift3新路程(3)"\()"