Folding UVA
来源:互联网 发布:淘宝五折换购 编辑:程序博客网 时间:2024/05/21 17:11
动态规划,其实感觉有点像枚举,从串的末尾开始逐步推进到串的开头,每次判断将串分开结合得到的最小长度值以及是否能够将当前的整个串进行压缩得到更小的长度值的串,将当前得到的最小的串的值进行记录,作为下一次判断的依据,依次类推,直到得到最小长度的串即可,具体实现见如下代码:
package a;//实际提交的时候记得去掉包名import java.util.Arrays;import java.util.Scanner;/** * Created by wangshiyuan on 2017/10/11. */public class Main { String s; String [][]dp=new String[100][100]; int Inf=1<<20; public void Init(int length){ for(int i=0;i<length;i++){ for(int j=0;j<length;j++){ dp[i][j]=""; if(i==j) dp[i][j]+=s.charAt(i); } } } public int Combine(int i,int j){ int len=j-i+1; for(int k=1;k<=len/2;k++){ if(len%k==0){ boolean exist=true; for(int ind=i;ind<=j-k;ind++){ if(s.charAt(ind)!=s.charAt(ind+k)){ exist=false; break; } } if(exist) return k; } } return 0; } public void Slove(){ Scanner scan=new Scanner(System.in); while(scan.hasNextLine()){ s=scan.nextLine(); int length=s.length(); Init(length); for(int i=length-2;i>=0;i--){ for(int j=i+1;j<length;j++){ int ans=Inf; int ind=-1; for(int k=i;k<j;k++){ if(dp[i][k].length()+dp[k+1][j].length()<ans){ ans=dp[i][k].length()+dp[k+1][j].length(); ind=k; } } dp[i][j]=dp[i][ind]+dp[ind+1][j]; int len=Combine(i,j); if(len>0){ int L=j-i+1; int amount=L/len; String head=Integer.toString(amount); String temp=head+"("+dp[i][i+len-1]+")"; if(temp.length()<dp[i][j].length()) dp[i][j]=temp; } } } System.out.println(dp[0][length-1]); } } public static void main(String[] args){ Main a=new Main(); a.Slove(); }}
阅读全文
0 0
- Folding UVA
- uva 177 Paper Folding
- Uva - 177 - Paper Folding
- UVA 1630 folding
- UVA 1630 Folding
- uva 1630 Folding
- uva 1630——Folding
- Folding
- UVA 12649 Folding Machine(暴力搜索)
- Uva 177 Paper Folding(模拟?Orz)
- UVA-1630 Folding (KMP、区间dp)
- UVA 1630 Folding——区间DP(记忆化搜索)
- Folding@home
- poj2176 Folding
- Paper folding
- UVA1630 - Folding
- Area Folding
- Folding Gym
- 个性化推荐的十大挑战
- Android studio中打包apk出现"XXX" is translated here but not found in default locale的解决问题的方法
- java语言基础(100)——网络编程(udp tcp发收数据)
- Python矩阵运算库numpy常用函数
- 项目知识点
- Folding UVA
- 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输出12,输出12*12的乘法口诀表。
- 240 Search a 2D Matrix II
- 错误解决方案__20161031重仿.png
- Learning Python Part II 之 作用域(scope)
- KMP求最小覆盖子矩阵
- ubuntu中默认Python2和Python3的转换命令
- CodeForces 867B Save the problem!
- JZOJ 5404. 【NOIP2017提高A组模拟10.10】Graph