hrbust 1828 剪纸条【类Floyd的dp+思维】好题!
来源:互联网 发布:椰风新韵网络写作学校 编辑:程序博客网 时间:2024/04/28 13:16
剪纸条Time Limit: 1000 MSMemory Limit: 32768 KTotal Submit: 12(6 users)Total Accepted: 7(6 users)Rating: Special Judge: NoDescription
现在举行的是一场权威性比赛“卧的肥佬”,但是比赛现场有一道很难的题目-剪纸条。规则如下:
给出一张长度为 n 的纸条,纸条上每单位的位置都有一个花纹,并且最多只有两种花纹,我们分别用字母 A 和 B 来表示,每个选手需要剪最少的次数,使得最后得到的每张纸条上的花纹都是一个回文串,并且要求纸条不可以叠在一起剪。
小G想知道自己最少需要剪的次数。
Input多组测试数据。
对于每组测试数据,输入一行字符串,表示给出的纸条上的花纹,每个字符串不多于100个字符。
Output对于每组数据,输出一个整数,表示需要剪的次数,每组输出占一行。
Sample InputABBAB
AABABB
ABABABA
Sample Output1
2
0
思路:
1、首先我们设定map【i】【j】表示起点为i的串到终点为j的串需要拿多少次回文串能够使得其串为空。
那么我们先暴力处理map【i】【j】=1的情况,因为字符串不长,那么我们直接暴力预处理即可。其余的map【i】【j】初始化为inf。
2、那么我们考虑这样一个问题:
如果从i到j是一个回文串,从j+1到k是一个回文串,并且从i到k并不是一个回文串,那么对应如果想要将从i到k的字符串拆分的话,对应就要拿两次
那么我们利用Floyd求最短路的思想,推倒出其状态转移方程为:
map【j】【k】=min(map【j】【k】,map【j】【i】+map【i+1】【k】);
3、那么其答案就是map【0】【n-1】-1;
4、注意裸跑Floyd会TLE,我们稍加优化就能900+ms擦边Ac。
这个题正解是O(n^2)的dp->.->
Ac代码:
#include<stdio.h>#include<iostream>#include<string.h>using namespace std;char a[1500];int map[150][150];int main(){ int cont=0; while(~scanf("%s",a)) { cont++; if(cont>300)return 0; memset(map,0x3f3f3f3f,sizeof(map)); int n=strlen(a); for(int i=0;i<n;i++) { for(int j=i;j<n;j++) { int flag=0; int cont=0; for(int k=i;k<i+(j-i+1)/2;k++) { if(a[k]==a[j-cont]) cont++; else flag=1; } if(flag==0) { map[i][j]=1; } } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(map[j][i]==0x3f3f3f3f)continue; for(int k=0;k<n;k++) { map[j][k]=min(map[j][k],map[j][i]+map[i+1][k]); } } } printf("%d\n",map[0][n-1]-1); }}
0 0
- hrbust 1828 剪纸条【类Floyd的dp+思维】好题!
- hrbust 1404 Leyni的汽车比赛【dp+思维优化】好题!
- Hrbust 1846 方格涂色【dp+递推思维】好题!好题!好题!
- hrbust1828 剪纸条(DP)
- hrbust 哈理工oj 1834 括号匹配【好题】【floyd+dp】
- hrbust 1539 选课【思维+贪心】好题
- hrbust 1774 succession【思维】好题
- Hrbust 1980 Failed【思维】好题!
- Hrbust 1329 Leyni, 罗莉 与 游乐场【树型Dp+思维】好题!
- Hrbust 2063 萌萌哒十五酱的情书~【思维】好题!好题!好题!
- Hrbust 1256 Province Region Competition Team Play【状压dp+分段处理思想+思维】好题!好题!好题!
- Hrbust 1361 Leyni的机器人【dp】好题
- hrbust 1857 koko的能量值公式【思维+二分】好题!好题!
- Hrbust 1427 Leyni的情人节【思维+最长递减子序列】好题!
- hrbust 1349 Graph【Floyd逆向思维】
- hrbust 1662 凸多边形【最短路SPFA+建图+思维】好题
- Hrbust 1517 Summits【Bfs+思维+贪心】好题~
- Hrbust 2222 应援团补完计划【并查集+思维】好题~
- Android string.xml多语言翻译工具
- 线程函数
- Kafka 设计详解之队列
- Android入门第九篇之AlertDialog
- 统计学习方法笔记(1)——统计学习方法概论
- hrbust 1828 剪纸条【类Floyd的dp+思维】好题!
- 视频监视器常见的五种故障
- 【codeforces】gym 101138 K. The World of Trains【前缀和优化dp】
- GUI Form小问题一
- Java经典逻辑编程50题
- Java集合学习笔记
- Android自定义Dialog
- CentOS5.8分区与文件系统
- 数据挖掘岗面试总结(拿到百度sp,腾讯offer)