UVA 11552Fewest Flops 【区间dp】
来源:互联网 发布:mvvm数据绑定原理 编辑:程序博客网 时间:2024/05/22 07:53
题意:将一个字符串分成若干块,每块大小为k,保证串的长度是k的倍数。
每块的元素可以任意摆放,但是块与块之间的位置不变。摆放完后,将连续相同的字符看成一个,问最少多少个。
分析:定义dp[i][j]为第i块以该块的第j个元素结尾。
状态转移:
dp[i][j]=min(dp[i][j],dp[i-1][p]+cnt-1);//如果前一块以p结尾,而第i块不以p结尾,那么这里就可以合并一种字符。
dp[i][j]=min(dp[i][j],dp[i-1][p]+cnt);//其他不能合并情况。
cnt是当前字符种数。
代码:
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<vector>#include<queue>#include<cmath>#include<stack>#include<set>#include<map>#define INF 0x3f3f3f3f#define Mn 1005#define Mm 2000005#define mod 1000000007#define CLR(a,b) memset((a),(b),sizeof((a)))#define CPY(a,b) memcpy ((a), (b), sizeof((a)))#pragma comment(linker, "/STACK:102400000,102400000")#define ul u<<1#define ur (u<<1)|1using namespace std;typedef long long ll;int dp[Mn][Mn];int vis[30];int main() { int t; string s; scanf("%d",&t); while(t--) { int k; scanf("%d",&k); cin>>s; CLR(dp,0x3f); int block=s.size()/k; for(int i=0;i<block;i++) { CLR(vis,0); int cnt=0; for(int j=i*k;j<(i+1)*k;j++) vis[s[j]-'a']=1; for(int j=0;j<26;j++) if(vis[j]) cnt++; if(!i) for(int j=0;j<k;j++) dp[i][j]=cnt; else for(int j=0;j<k;j++) { for(int p=0;p<k;p++) { if(vis[s[(i-1)*k+p]-'a']&&(s[i*k+j]!=s[(i-1)*k+p]||cnt==1)) dp[i][j]=min(dp[i][j],dp[i-1][p]+cnt-1); else dp[i][j]=min(dp[i][j],dp[i-1][p]+cnt); } } } int ans=INF; for(int i=0;i<k;i++) ans=min(dp[block-1][i],ans); cout<<ans<<endl; } return 0;}
0 0
- UVA 11552Fewest Flops 【区间dp】
- uva 11552 - Fewest Flops(dp)
- UVA 11552 Fewest Flops(DP)
- FEWEST FLOPS - UVa 11552 dp
- UVA - 11552 Fewest Flops DP
- uva 11552 - Fewest Flops(dp)
- Uva 11552 - Fewest Flops 字符串dp
- uva 11552 - Fewest Flops( 多维dp )
- UVA 11552 Fewest Flops 多维dp
- UVA 11552 - Fewest Flops(dp+贪心)
- UVa 11552 - Fewest Flops(简单DP)
- uva 11552 Fewest Flops dp+贪心
- UVA 11552-Fewest Flops(DP)
- UVa 11552 - Fewest Flops(DP,状态设计)
- uva 11552 Fewest Flops 线性dp
- UVA 11552 Fewest Flops(序列划分dp)
- UVA 11552 Fewest Flops
- uva 11552 Fewest Flops
- jasperreport报表预览内容自动换行
- 开源项目AndroidReview学习小结(2)
- git基本
- iOS开发~FMDB的使用
- xhost命令介绍
- UVA 11552Fewest Flops 【区间dp】
- (六)RxJava轮询器:interval
- USING语句:定义一个范围,将在此范围之外释放一个或多个对象
- Android性能优化典范 - 第1季
- select2选中默认值
- Android Matrix详解
- 【BZOJ 3611】 [Heoi2014]大工程|虚树|树上DP
- 下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- postgresql大版本升级