POJ 1390 Blocks ||UVA 10559 - Blocks(记忆化搜索)
2012-09-17 20:25
513 查看
题意:一排带有颜色的砖块,每一个可以消除相同颜色的砖块,,每一次可以到块数k的平方分数。问怎么消能使分数最大。。
思路:记忆化搜索,dp[i][j][k] 表示,从i到j块且j后面有k块与第j快的颜色一样。
dp[l][r][k] = max(dp[l][r][k],dfs(l,i,k+1)+dfs(i+1,r-1,0));
思路:记忆化搜索,dp[i][j][k] 表示,从i到j块且j后面有k块与第j快的颜色一样。
dp[l][r][k] = max(dp[l][r][k],dfs(l,i,k+1)+dfs(i+1,r-1,0));
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 209; int dp ; int re ; int dfs(int l,int r,int k) { if(l>r) return 0; if(dp[l][r][k]) return dp[l][r][k]; dp[l][r][k] = dfs(l,r-1,0)+(1+k)*(1+k); for(int i=r-1;i>=l;i--) if(re[r]==re[i]){ dp[l][r][k] = max(dp[l][r][k],dfs(l,i,k+1)+dfs(i+1,r-1,0)); } return dp[l][r][k]; } int main() { freopen("in.txt","r",stdin); int cas,T=1,n; scanf("%d",&cas); while(cas--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&re[i]); memset(dp,0,sizeof(dp)); printf("Case %d: %d\n",T++,dfs(1,n,0)); } return 0; }
相关文章推荐
- Uva 10559 & POJ 1390 Blocks 区间dp
- UVA - 10559 Blocks 记忆化搜索
- POJ - 1390 Blocks(记忆化搜索)
- poj 1390 Blocks (记忆化搜索)
- POJ 1390 Blocks(区间DP + 记忆化搜索)
- poj 1390 Blocks (记忆化搜索)
- poj 1390 Blocks(记忆化搜索/动态规划)
- POJ_1390_Blocks(DP)
- uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟
- POJ 1390 Blocks (区间DP)
- poj 1390 Blocks (经典区间dp 方块消除)
- poj1390 Blocks
- poj 1390 Blocks(dp)
- poj1390 Blocks
- POJ1390 Blocks——动态规划——pku1390
- poj 1390 Blocks
- poj 1390(消除方块(blocks))
- 【poj1390】 Blocks
- POJ 1390 Blocks 笔记
- uva 10559 Blocks