LA 3363 String Compression(dp)
来源:互联网 发布:monkey社交软件下载 编辑:程序博客网 时间:2024/05/23 00:09
题意:给出一个字符串,再给出一个字符串压缩的方法,问该字符串最少能压缩到多少位。
思路:一直没思路啊,最后只能看题解,看了题解发现这题并没有想象中的难……用dp[i][j]表示区间i~j的最小长度,则dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]),另外,还要判断区间i~j的字符串能不能压缩,然后就没有然后了。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<map>#include<queue>#include<stack>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi acos(-1.0)using namespace std;typedef long long ll;const int maxn=200+10;char str[maxn];int dp[maxn][maxn],n;int check(int s,int t,int k){ if((t-s+1)%k!=0) return 0; for(int i=s+k;i<=t;i+=k) { for(int j=0;j<k;++j) if(str[s+j]!=str[i+j]) return 0; } return (t-s+1)/k;}inline int getnum(int x){ if(x>=0&&x<=9) return 1; if(x>=10&&x<=99) return 2; return 3;}void solve(){ for(int i=0;i<n;++i) dp[i][i]=1; int tmp; for(int k=2;k<=n;++k) { for(int i=0;i<=n-k;++i) { dp[i][i+k-1]=inf; for(int j=i;j<i+k-1;++j) dp[i][i+k-1]=min(dp[i][i+k-1],dp[i][j]+dp[j+1][i+k-1]); for(int z=1;z<=k/2;++z) { tmp=check(i,i+k-1,z); if(tmp) dp[i][i+k-1]=min(dp[i][i+k-1],dp[i][i+z-1]+2+getnum(tmp)); } } }}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int t; scanf("%d",&t); while(t--) { scanf("%s",str); n=strlen(str); solve(); printf("%d\n",dp[0][n-1]); } return 0;}
- LA 3363 String Compression(dp)
- LA 3363 String Compression
- UVALive - 3363 String Compression (区间DP)
- UVALive - 3363 String Compression 区间DP
- uva1351 - String Compression 区间DP
- uva 1351 - String Compression(dp)
- 【TOJ 2510.】 String Compression【DP】
- uva 1351 String Compression(dp)
- UVALive 3363 String Compression (区间DP,4级)
- UVALive 3363 String Compression
- UVAlive-3363 String Compression
- uva 1351 String Compression(字符串区间dp)
- UVA 1351 - String Compression(区间DP)
- UVA 1351 String Compression(区间DP)
- String Compression - UVa 1351 dp+hash
- CF825F:String Compression(dp & kmp)
- UVA1351 UVALive 3363 String Compression
- la 4394 string painter 区间dp
- poj 4019 Immediate Delivery
- java反射机制
- VC++ Sleep函数原理及Sleep(0)的使用(文章较深入但通俗易懂)
- 栈——表达式求值
- iOS7----64位与32位 对比 数据类型
- LA 3363 String Compression(dp)
- Android关于分辨率的支持(QVGA,HVGA,WVGA,WXGA)
- 数据库 三范式最简单最易记的解释
- 用Doxygen+Graphviz生成函数调用流程图
- Android学习之数据存储---SharedPreference
- hdoj 胜利大逃亡
- 让Hsqldb随WebAPP一起启动
- Eclipse从SVN checkout并创建项目
- CSS布局小记