stdu1309(不老的传说)

题目链接:http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/1309.html

不老的传说问题

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic Discuss

Problem Description

一位先知告诉dynamic,在遥远的地方,有一处不老的泉水,在那里,他可以找到他人生的意义。按照先知的指引,dynamic出发了。翻越雪山,穿过丛林,渡过汪洋,终于来到了沙漠的最深处。按照先知的说法,泉水就在这个地方。然而除了无尽的黄沙之外,什么都没有。

dynamic几乎绝望了,他盲目地走着,突然来到了一圈奇异的巨石前,在巨石阵的中央清晰地传来泉水轻快的声音。巨大的石头挡住了去路,dynamic无法前进了。突然间,本来无色的石头闪烁出绚丽夺目的光芒,与泉水声交织成诗一般的乐章。又过了一刹那,色彩消失了。
 
“这里面一定有什么秘密,我要把石头染成刚才的颜色!”dynamic对自己说。他还清楚地记得每一块石头的颜色。智慧女神雅典娜这是出现了,递给他一把神奇的刷子,说“这把刷子每次可以把连续的不超过K块石头刷成一种新颜色,新刷的颜色会覆盖原来的颜色。用最少的次数,恢复石阵的光彩,你就会找到不老的泉水。”

dynamic意识到这并不是一件很容易的事,他出发得太匆忙,忘了带上手提电脑。你能帮助他吗?

Input

第1行包含3个整数N,C,K。N是石头的个数,C是颜色的种类,K是每次最多刷过的石头的个数。1<=N<=200,1<=C,K<=N。

第2行包含N个整数,分别是N块石头最终的颜色,按照顺时针的顺序。颜色是1到C之间的一个整数,整数间用一个空格隔开。开始的时候,所有的石头都是无色的。

Output

输出一个整数,为需要的最少次数。

Sample Input

5 2 3
1 2 1 2 1

Sample Output

3

Hint

样例说明:设5块石头的编号分别是1,2,3,4,5。可以先把5,1,2染成颜色1;再把2,3,4染成颜色2;最后把3染成颜色1。

思路:根据题目分析,因为我们可以把长度不超过k的连续石块涂上相同的颜色,所以我们可以借此来减速需要涂的次数,我们设dp[i][j]为将区间(i,j)涂成所需颜色需要涂色的次数。我们容易发现,对于区间(i,j),当我们要从 i 或 j 将一大片涂色时,我们可以在涂色的第一时间就将他们涂色(我们可以先 从 j 开始 的一块涂色,再将从 i 开始的一块涂色,再将其它位置涂色,容易知道这样涂色可以得到最优解,因为i,j都是边界位置,其他位置的涂色不会对其产生影响)(你也可以用其他的涂色方式,只要可以得到最优解就可以了,但是为了解题方便,我们就以以上的方法涂色),然后再进行其他位置的涂色(因为i,j 是边界位置,其他位置的涂色不会对他们照成影响),

当 i 和 j 位置上的颜色相同并且 i ,j 相距不超过 k1 时,我们就可以先将 i 到 j 这一段涂色,然后再考虑(i+1,j)区间的染色就可以了(我们已经在区间(i+1,j)染色的第一步将 i 染色了)

其他情况时,因为我们要求涂色次数最小,那么对于区间(i,j)的涂色,它一定是由(i,k)+(k+1,j)得到的(为了减少涂色次数,那么肯定不能存在区间的交叉,只能存在相邻或包含)

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
int s[220];
int dp[420][420];
const int INF=1e9;
int main(){
    int n,c,k1;
    scanf("%d%d%d",&n,&c,&k1);
    for(int i=0;i<n;i++){
        scanf("%d",&s[i]);
    }
    for(int i=0;i<2*n;i++)
    dp[i][i]=1;
    for(int i=1;i<n;i++){
        for(int j=0;i+j<2*n-1;j++){
            dp[j][i+j]=INF;
            for(int k=j;k<=min(i+j,j+k1);k++){
                if(k!=j&&s[j%n]==s[k%n])
                dp[j][i+j]=min(dp[j][i+j],dp[j+1][k]+dp[k+1][i+j]);
                else
                dp[j][i+j]=min(dp[j][i+j],dp[j][k]+dp[k+1][i+j]);
            }
            for(int k=j+k1+1;k<=i+j;k++){
                dp[j][i+j]=min(dp[j][i+j],dp[j][k]+dp[k+1][i+j]);
            }
            //printf("%d %d %d\n",j,i+j,dp[j][i+j]);
        }
    }
    int mn=INF;
    for(int i=0;i<n;i++){
        mn=min(mn,dp[i][i+n-1]);
    }
    printf("%d\n",mn);
    return 0;
} 

原文地址:https://www.cnblogs.com/cglongge/p/10886353.html

时间: 2024-10-20 15:14:57

stdu1309(不老的传说)的相关文章

sdut 1309 —— 不老的传说问题

题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1309 #include <cstdio> #include <iostream> using namespace std; const int MAXN = 200*2+5; int a[MAXN]; int dp[MAXN][MAXN]; int main () { int N, C, K; while(scanf(&qu

SDUT 1309 不老的传说问题 (区间DP)

题意: 有一个环形序列,n个数字表示一种颜色,要求将白板环刷成一模一样的环,限制是每次最多只能刷连续的K个位置,问最少需要刷几次? 思路: 跟2008长春那道painter string 差不多.只是这次是个环,难度也是没有提升的,只需要变成一个2*n-1个数字的序列就可以了. 考虑区间[L,R],如果[L]和[L+1,R]中的某一个颜色相同,才有可能减少刷的次数.那么从左到右枚举这个和[L]相同颜色的位置,[L,R]的次数就可以变成[L+1,k]+[k+1,R]了.可以想象成[L]是依靠另一个

《我和你》-51CTO学院

提起码字儿写文章,只是<十七岁那年的雨季>时的<理想>.从当年的<追风少年>到现在的大叔,不知是什么力量,也许是<天意>,<在那遥远的地方>好像有一双<隐形的翅膀>使我<大约在冬季>的时候<选择>和学院<牵手>合作.属于我们讲师的<光辉岁月>来临了.刚开始录时不熟练,只能反复<练习>,<风雨无阻>的录课后,就能站<在希望的田野>上收获,在大半年与学院&

全球100部最佳影片排行

全球100部最佳影片排行 以下是IMDB(美国著名影评网站)网民评出全球100部最佳影片 :  1. <教父>The Godfather 1972年 8.9 分  科波拉黑帮经典<教父>的首部,派拉蒙公司最成功的影片之一,坐稳IMDB头把交椅应属,众望所归.虽然评论界一致对<教父>系列的第2集推崇有佳,但大多数影迷似乎还是对<教父>情有独钟,这可能与马龙·白兰度极具个力的表演有关,直到今天他那种含 糊沙哑的声音与神秘莫测的表情都依然叫人着迷.  2. <

C语言程序设计 第3版 课后习题答案 苏小红 王宇颖 孙志岗 版 实验题答案 高等教育出版社 课后答案 解析 第3章 课后答案

C语言程序设计 第3版 课后习题答案  苏小红 王宇颖 孙志岗  实验题答案 高等教育出版社 课后答案 解析 第3章 课后答案 C语言程序设计 苏小红 王宇颖 孙志岗 版 习题3 课后习题答案 前辅文第1章 为什么要学C 语言 课后习题答案1.1 引言1.2 游戏?黑客和C 语言1.3 C 语言,不老的传说1.4 C 语言的爱与恨1.5 C 语言教给我们的事1.6 什么是“编程”1.7 本章小结习题1第2章 C 数据类型 课后答案2.1 常量与变量2.1.1 常量2.1.2 变量2.2 简单的屏

从“水下八关”的传说说起(人民邮电报专栏《乐游记》之17)

越不容易开启的隐藏关卡,越容易成为剧情的特殊分支,直接影响到游戏的结局,而这激发了玩家高亢的游戏热情,同时让游戏经久不衰. 文/张书乐 二周目.隐藏角色.隐藏关卡等等探宝式的游戏玩法,让游戏具有了更强的续航力.任何事物都有一个起源,而在我看来,这一切都源于与<魂斗罗>有关的"水下八关"传说,这个传说和中国游戏玩家关系很大. 在没有社交网络的时代,<魂斗罗>游戏非常流行.而在游戏第六关有一个bug(程序漏洞),会使敌兵的图形显示不正常,变成类似青蛙嘴的模样.在中国

蓝桥杯 算法训练 ALGO-125 王、后传说

算法训练 王.后传说 时间限制:1.0s   内存限制:256.0MB 问题描述 地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横.坚.斜线位置. 看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地.各皇后都有自己的势力范围,但也总能找到相安无事的办法. 所有中国人都知道,皇权神圣,伴君如伴虎,触龙颜者死...... 现在有一个n*n的皇宫,国王占据他所在位置及周围的共9个格子,这些格子皇后不能使用(如果国王在王宫的边上,占用的格子可能不到9个).当然,皇后也不会攻击国王.

关于炉石传说的NGUI问题

前几天,将炉石传说的开场动画搬了上去.看实现界面. 感觉这个人物还是很性感的==!! 播放动画之后便是切换到主界面 1.在NGUI插件下打开prefabs Toolsbar. 2.将prefabs Toolsbar的background添加 3.删除backgroundController 4.找到背景图片之后右键NGUI,创建图集制作 5.在hierarchy面板中选定UIroot之后 在scene中右键创建精灵. 6.在图集的预制体上update/add logo的图片. 注释:sprite

七剑传说可以在手机上面玩吗

"流云,浮世繁生都只是一片虚妄而已,你有何必为了她如此执着呢?"星辰珠的声音响起,他竟然也学起了流云的腔调,就好像是得道高僧一般.http://dz9925.com "遮天大手,统统都给我拿住炼化!"http://fh9925.com 犹如晴天霹雳,突然乍响,震得周围的人一阵耳鸣.两人碰撞后,尘埃漫天,爆发出了震天的轰鸣声,宛如一道晴天霹雳直接落在了大地之上.http://yygj2255.com 惊天的剧烈撞击发生,光束直接激射在了禅掌的掌心,发出了一道道虚空震荡