区间dp
区间dp
[USACO16OPEN]248 G
题目大意:
给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问序列中出现的最大数字的值最大是多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。
\(n\le 248\)
思路:
裸的区间dp,直接统计即可,要注意是能合成中最大的,而不是本身最大的,不能统计开始时候的数字。
核心代码:
for(int i=2;i<=n;i++){
for(int l=1;l+i-1<=n;l++){
int r=l+i-1;
f[l][r]=-1;
for(int k=l+1;k<=r;k++){
if(f[l][k-1]==-1||f[k][r]==-1)continue;
if(f[l][k-1]==f[k][r])f[l][r]=max(f[l][r],f[l][k-1]+1);
}
ans=max(ans,f[l][r]);
}
}

浙公网安备 33010602011771号