poj1390 Blocks(区间dp)
来源:互联网 发布:淘宝有哪些好的男装店 编辑:程序博客网 时间:2024/06/05 20:46
黑书1.5.2例题1 方块消除
首先把相邻的同色块合并成一块,记录col[i],len[i],tot[i]此块后面可能再接的最大长度。用dp[i][j][k]表示区间i…j,在j块以右又接了长度k的最高得分。现在考虑第j块后面接了长度k,我们有两种策略:
1、直接消掉,那么得分就是
2、在i…j-1区间内找一块同为颜色col[j]的块,记为p,让j块接到p块后面,那么得分就是
取最大值即可。状态数
#include <cstdio>#include <cstring>#define N 210int tst,n,dp[N][N][N],col[N],len[N],tot[N],num;inline int max(int x,int y){return x>y?x:y;}inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int main(){// freopen("a.in","r",stdin); tst=read(); for(int tt=1;tt<=tst;++tt){ n=read();num=0;tot[0]=n; memset(len,0,sizeof(len)); for(int i=1;i<=n;++i){ int x=read();if(x!=col[num]) col[++num]=x,tot[num]=tot[num-1]; ++len[num];--tot[num]; } for(int i=1;i<=num;++i) dp[i][i-1][0]=0; for(int i=num;i>=1;--i) for(int j=i;j<=num;++j) for(int k=0;k<=tot[j];++k){ dp[i][j][k]=dp[i][j-1][0]+(len[j]+k)*(len[j]+k); for(int p=i;p<j;++p) if(col[p]==col[j]) dp[i][j][k]=max(dp[i][j][k],dp[p+1][j-1][0]+dp[i][p][len[j]+k]); } printf("Case %d: %d\n",tt,dp[1][num][0]); } return 0;}
阅读全文
0 0
- POJ1390 Blocks 区间DP
- poj1390 Blocks(区间dp)
- [POJ1390]Blocks(区间dp)
- [POJ1390]Blocks(dp)
- poj1390 (区间dp)
- poj1390 Blocks
- poj1390 Blocks
- poj1390区间dp+记忆化搜索
- POJ1390 Blocks 【动态规划】
- poj 1390 Blocks 【区间dp】
- [POJ1390]Blocks(方块消除)
- poj1390 方块消除 dp
- poj1390-dp消方块
- Uva 10559 & POJ 1390 Blocks 区间dp
- poj 1390 Blocks (区间dp)
- poj1390
- poj1390
- poj 1390 Blocks (经典区间dp 方块消除)
- js类型转换
- java程序 升级版ATM取款机
- java基础学习(三)--异常处理
- 更好的针对接口编程,使用接口内部类
- MySQL性能优化的最佳21条经验
- poj1390 Blocks(区间dp)
- 20170801 在其位
- 解决网易云托盘图标左置的问题!
- Effective Java 读书笔记
- sublime text3 之snippet编写代码片段
- Python实现设计模式--04.模版方法模式(Template Method Pattern)
- IC系统设计概述
- ios中修改状态栏颜色的方法
- 【JavaScript】我的第3个例子-innerHTML,GetElementById