qscoj 喵哈哈村的打印机游戏(区间dp)
2017-03-22 07:29
211 查看
题目链接:http://www.qscoj.cn/problem/54/
喵哈哈村的打印机游戏
发布时间: 2017年3月21日 20:00 最后更新: 2017年3月21日 20:02 时间限制: 1000ms 内存限制: 128M
描述
喵哈哈村的月亮同学很无聊,于是太阳同学给月亮同学出了个问题,来打发时间:
喵哈哈村有一台奇怪的纸带打印机,每次操作只能先决定一个大写字母(A到Z)在一条纸带上打印这个字母任意长度的连续序列,打印机可以选择在纸带的任意位置开始打印,并且无论纸带上原来是什么内容,都可以用新打印的内容覆盖。那么,对一个目标的字符串序列,请计算在一个空白纸带上最少需要的打印次数。例如,我们要打印的目标串是ABCBA,那么最优的方案是:在空白知道上连续打印5个A:AAAAA,从第二个A开始,连续打印3个B:ABBBA,打印一个C:ABCBA,因此ABCBA的最少打印次数是3次。
输入
每个测试输入包含1个测试用例
输入只有一行,一个长度大于1,小于等于50的目标字符串,字符串中每个字符都是A到Z的大写英文字符。
输出
输出一个整数,
样例输入1 复制
AAAAA
ABCBA
样例输出1
1
3
【思路分析】很典型的区间dp题目(可是窝佷鶸啊,不过这次学会了)。
dp[i][j]代表从第i个字符刷到第j个字符至少要刷多少次。当str[i]==str[k]的时候,dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]) 。
【AC代码】
喵哈哈村的打印机游戏
发布时间: 2017年3月21日 20:00 最后更新: 2017年3月21日 20:02 时间限制: 1000ms 内存限制: 128M
描述
喵哈哈村的月亮同学很无聊,于是太阳同学给月亮同学出了个问题,来打发时间:
喵哈哈村有一台奇怪的纸带打印机,每次操作只能先决定一个大写字母(A到Z)在一条纸带上打印这个字母任意长度的连续序列,打印机可以选择在纸带的任意位置开始打印,并且无论纸带上原来是什么内容,都可以用新打印的内容覆盖。那么,对一个目标的字符串序列,请计算在一个空白纸带上最少需要的打印次数。例如,我们要打印的目标串是ABCBA,那么最优的方案是:在空白知道上连续打印5个A:AAAAA,从第二个A开始,连续打印3个B:ABBBA,打印一个C:ABCBA,因此ABCBA的最少打印次数是3次。
输入
每个测试输入包含1个测试用例
输入只有一行,一个长度大于1,小于等于50的目标字符串,字符串中每个字符都是A到Z的大写英文字符。
输出
输出一个整数,
样例输入1 复制
AAAAA
ABCBA
样例输出1
1
3
【思路分析】很典型的区间dp题目(可是窝佷鶸啊,不过这次学会了)。
dp[i][j]代表从第i个字符刷到第j个字符至少要刷多少次。当str[i]==str[k]的时候,dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]) 。
【AC代码】
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; #define LL long long char str1[105]; int dp[105][105];//dp[i][j]的含义为从i刷到j至少要刷多少次 int main() { while(~scanf("%s",str1)) { memset(dp,0,sizeof(dp)); int len=strlen(str1); for(int j=0;j<len;j++) { for(int i=j;i>=0;i--) { dp[i][j]=dp[i+1][j]+1; for(int k=i+1;k<=j;k++)//从i到i和j的中间的所有的刷法 { if(str1[i]==str1[k])//i和k相同的时候,寻找i刷到k的最优解 { dp[i][j]=min(dp[i][j],dp[i+1][k]+dp[k+1][j]); } } } } printf("%d\n",dp[0][len-1]); } return 0; }
相关文章推荐
- 喵哈哈村的打印机游戏(区间DP)
- qscoj 喵哈哈村的扔硬币游戏(区间更新)
- NYOJ1111 游戏人生(区间DP)
- nyoj 1111 游戏人生(区间DP)
- uva 10891 sum游戏(区间dp)
- 【USACO3.3.5】游戏(区间dp的滚动数组与编码问题)
- uva10891(sum游戏)区间dp
- 乘法游戏(tyvj P1014)区间dp
- nyoj 1111 游戏人生(区间DP)
- 【BZOJ2121】字符串游戏【区间DP】
- hdu5693D++游戏 区间DP-暴力递归
- codevs1166 矩阵取数游戏(区间DP)
- 【区间dp】codevs1966 乘法游戏
- nyoj 1111 游戏人生(区间DP)
- qscoj 喵哈哈村与哗啦啦村的大战(四)(树形DP求非严格路径数量)
- codevs 1085 数字游戏 (环形区间dp+负数取膜)
- codevs1166 矩阵取数游戏(区间DP)
- 2017年浙江工业大学大学生程序设计迎新赛决赛—网络同步赛 G-取数游戏(区间dp)
- 合并游戏 737(区间Dp
- nyoj 1111 游戏人生(区间DP)