poj 1390

news/2025/2/9 9:41:37/

题意:一个方块消除的游戏,每次可以消除颜色相同的方块,每次得分是你消除的格子的数量的平方。

黑书上的一题。

    参照《算法艺术》上的算法

 

    题目的方块可以表示称color[i],len[i],1<=i<=l

    这里l表示有多少"段"不同的颜色方块

    color[i]表示第i段的颜色,len[i]表示第i段的方块长度

    让f[i,j,k]表示把(color[i],len[i]),(color[i+1],len[i+1]),...,(color[j-1],len[j-1]),(color[j],len[j]+k)合并的最大得分

    这里k是可跟j合并的长度

    考虑(color[j],len[j]+k)这一段,要不马上消掉,要不和前面的若干段一起消掉

.................................................................

    1.如果马上消掉,就是f[i,j-1,0]+(len[j]+k)^2

    2.如果和前面的若干段一起消,可以假设这"若干段"中最后一段是p,则此时的得分是f[i,p,k+len[j]]+f[p+1,j-1,0]

 

    于是f[i,j,k] = max{f[i,j-1,0]+(len[j]+k)^2, f[i,p,k+len[j]]+f[p+1,j-1,0] }

     其中color[p]=color[j] ,i<=p<j 边界条件f[i,i-1,0]=0;

     

 

复杂度

 

    O(n^4),时间效率很低,但可以利用更新解的必要条件color[p] = color[j]来优化算法

Run IDUserProblemResultMemoryTimeLanguageCode LengthSubmit Time
94122462010307204251390Accepted34432K1938MSG++961B2011-10-09 15:39:59
94122132010307204251390Accepted33912K1657MSC++961B2011-10-09 15:33:45
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int len[205],dp[205][205][205],n,color[205],flag;
int DP(int x,int y,int k)
{if(dp[x][y][k])return dp[x][y][k];if(x==y) return (len[x]+k)*(len[x]+k);dp[x][y][k]=DP(x,y-1,0)+(len[y]+k)*(len[y]+k);for(int i=x;i<y;i++){if(color[y]==color[i]){dp[x][y][k]=max(dp[x][y][k],DP(x,i,len[y]+k)+DP(i+1,y-1,0));}}return dp[x][y][k];	
}
int main()
{int T,ans,tem;scanf("%d",&T);for(int t=1;t<=T;t++){scanf("%d",&n);flag=0;memset(len,0,sizeof(len));memset(color,0,sizeof(color));for(int i=0;i<n;i++){scanf("%d",&tem);if(color[flag]==tem)len[flag]++;else{flag++;len[flag]++;color[flag]=tem;}}memset(dp,0,sizeof(dp));ans=DP(1,flag,0);printf("Case %d: ",t);printf("%d\n",ans);}return 0;
}



http://www.ppmy.cn/news/576649.html

相关文章

1390 Prepared statement contains too many placeholders

以前的一个项目&#xff0c;在进行mysql执行预插入语句的时候&#xff0c;如果预插入的数据条数过多&#xff0c;则会报错。 具体报错为&#xff1a; 1390 Prepared statement contains too many placeholders 字面意思大概是预执行语句包含了太多的占位符。 查询了相关的资料…

c++作业3-F(1390)

Problem F: 时间类的常量 Time Limit: 4 Sec Memory Limit: 128 MB Submit: 5927 Solved: 4758 [Submit][Status] Description 封装一个时间类Time&#xff0c;用于时间处理的相关功能&#xff0c;支持以下操作&#xff1a; 1. Time::Time()无参构造方法。 2. Time::Tim…

1397

Goldbachs Conjecture Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4667 Accepted Submission(s): 1754 题目链接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid1397 Problem Description Gold…

hdu 1390 Binary Numbers

题目地址&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid1390 题目描述&#xff1a; Binary Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2834 Accepted Submission(s): 1758 Probl…

【路径规划】基于matlab Hybrid A_Star算法机器人路径规划【含Matlab源码 1390期】

⛄一、A_star算法简介 1 A Star算法及其应用现状 进行搜索任务时提取的有助于简化搜索过程的信息被称为启发信息.启发信息经过文字提炼和公式化后转变为启发函数.启发函数可以表示自起始顶点至目标顶点间的估算距离, 也可以表示自起始顶点至目标顶点间的估算时间等.描述不同的…

BZOJ 1390 [CEOI2008] Fence 题解

纪念一下&#xff0c;调了整整两周。 本题题意非常清晰&#xff0c;故不提供题意简述。 Solution 注意到 20 4 < 111 20\times 4<111 204<111&#xff0c;所以即使花 4 4 4 个点包住一棵树也是值的。所以我们考虑包住最多的树&#xff0c;这样一定是最优的。 所…

General error: 1390 Prepared statement contains too many placeholders

欢迎加入PHP技术交流QQ群 370648191、201923866 今天遇到mysql占位符的问题。 问题背景是: 在做一个自己用的股票分析系统的时候&#xff0c;采集单只股票数据&#xff0c;可指定采集时间区间。采集完成后&#xff0c;一次性插入数据库。 题外话开始 (一些经验欠缺的&#xf…

POJ 1390:Blocks

问题描述 你们中的一些人可能玩过一个名为“块”的游戏。一行有n个块&#xff0c;每个框都有一个颜色。这是一个例子&#xff1a;金&#xff0c;银&#xff0c;银&#xff0c;银&#xff0c;银&#xff0c;青铜&#xff0c;青铜&#xff0c;青铜&#xff0c;金。相应的图片将如…