Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业

设字符串的长度为n,整型数组arr[0. . .n-1]的第一个数和最后一个数为开始点与结束点的位置,中间的数为拆分点的位置,设cost[i,j]为第i个分割点到第j个分割点的最小代价,两个分割点之间要有大于等于一个分割点才能把字符串继续拆分,因此j-i>=2; 得到递推式

package org.xiu68.ch06.ex6;
public class Ex6_9 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//分割的最小代价为:30
//分割顺序为: 10 3
int[] arr=new int[]{1,3,10,20}; //设开始点为1和20,中间三个点为拆分点
int[][] splitPoint=new int[arr.length+1][arr.length+1];
minSplitCost(arr,splitPoint);
System.out.print("分割顺序为: ");
printSplitPoint(arr,splitPoint,1,arr.length);
System.out.println();
//分割的最小代价为:48
//分割顺序为: 10 8 2
int[] arr2=new int[]{1,2,8,10,30};
int[][] splitPoint2=new int[arr2.length+1][arr2.length+1];
minSplitCost(arr2,splitPoint2);
System.out.print("分割顺序为: ");
printSplitPoint(arr2,splitPoint2,1,arr2.length);
}
public static void minSplitCost(int[] arr,int[][] splitPoint){
int[][] cost=new int[arr.length+1][arr.length+1];
int length=arr.length;
for(int s=2;s<=length;s++){ //分割点的个数
for(int i=1;i<=length-s+1;i++){ //第一个分割点
int j=i+s-1; //最后一个分割点
if(j-i>=2) //两个分割点之间要有大于一个的分割点才能继续分割
cost[i][j]=Integer.MAX_VALUE;
for(int k=i+1;k<=j-1;k++){ //寻找分割子串最小代价对应的分割位置
int temp=cost[i][k]+cost[k][j]+arr[j-1]-arr[i-1]+1;
if(temp<cost[i][j]){
cost[i][j]=temp;
splitPoint[i][j]=k;
}
}//
}//
}//
System.out.println("分割的最小代价为:"+cost[1][length]);
}
public static void printSplitPoint(int[]arr,int[][] splitPoint,int i,int j){
if(j-i>=2){
System.out.print(arr[splitPoint[i][j]-1]+" ");
printSplitPoint(arr,splitPoint,i,splitPoint[i][j]);
printSplitPoint(arr,splitPoint,splitPoint[i][j],j);
}
}
}
Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业的更多相关文章
- SQL Server获取下一个编码字符串的实现方案分割和进位
我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方 ...
- Swift3.0语言教程比较、判断字符串
Swift3.0语言教程比较.判断字符串 Swift3.0语言教程比较.判断字符串,在一个程序中字符串很多时,常常会做的操作就是对这些字符串进行比较和判断.本小节将讲解这些内容. 1.不区分大小写比较 ...
- C语言提供了几个标准库函数 itoa() atoi()
C语言提供了几个标准库函数C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转换为字符串的一个例子: # include <s ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 字符串
C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持.字符串实际上是使用 null 字符 ...
- C语言程序设计(十) 字符串
第十章 字符串 字符串常量是由一对双引号括起来的一个字符串序列 字符串实际就是由若干个有效数字构成且以字符'\0'作为结束的一个字符序列 C语言没有提供字符串数据类型,因此字符串的存取要用字符型数组来 ...
- C语言中的字符和字符串
C语言在中常常出现字符和字符串,而一串字符或者字符串其实就是数组 字符数组的定义 char arr[]={'h','e','l','l','o','\0'}; 而定义字符串: char arr1[]= ...
- C语言提供的位运算符
运算符 含义 描述 & 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0 | 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1 ^ 按位异或 若参加运算的两个 ...
- C语言基础:数组和字符串
数组:数组的定义注意点 数组初始化正确写法: int args[5] = {1,23,32,4,5}; int args[5] = {12,23}; int args[5] = {[3]=23, [4 ...
- Python语言总结 4.2. 和字符串(str,unicode等)处理有关的函数
4.2.7. 去除控制字符:removeCtlChr Python语言总结4.2. 和字符串(str,unicode等)处理有关的函数Sidebar Prev | Up | Next4.2.7 ...
随机推荐
- pow log 与 (int)
1.不能用%d输出double类型的数 double a1=5.3; double a2=1234.1234; double a3=3412341.12341234; double b1=1.5; d ...
- spring环境测试
比如有个service类:(再建个接口类) package com.tydic.jtcrm.batch.service.impl; import java.util.Map; import javax ...
- windows中的mysql修改管理员密码
上周安装了Mysl 但是却无法登陆,找了好久才找到这个解决办法,讲的详细谢谢了. [摘要:1.my-default.ini 更名my.ini 正在解压的目次上面复造my-default.ini一份更名 ...
- jdbc url写法(集群)
mysql集群,jdbc url写法:jdbc:mysql://[host:port],[host:port].../[database][?propertyName1][=propertyValue ...
- Feature Selection Can Reduce Overfitting And RF Show Feature Importance
一.特征选择可以减少过拟合代码实例 该实例来自机器学习实战第四章 #coding=utf-8 ''' We use KNN to show that feature selection maybe r ...
- Scala进阶之路-反射(reflect)技术详解
Scala进阶之路-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的反射技术和Java反射用法类似,我这里就不一一介绍反射是啥了,如果对 ...
- POJ - 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内)
http://poj.org/problem?id=1584 题意 按照顺时针或逆时针方向输入一个n边形的顶点坐标集,先判断这个n边形是否为凸包. 再给定一个圆形(圆心坐标和半径),判断这个圆是否完全 ...
- tomcat运行时为什么不能删除war
tomcat启动时会监听webapps下的war文件,如果有新增就解压,如果有删除就删除项目
- 洛谷4718【模板】Pollard-Rho算法
传送门 Description: 给定T个数,分别求出它们的最大质因数 Solution: 其实大概框架是很容易想到的 对于一个数n 找到它的一个因数x 判断这个因数是不是质数 如果是质数就更新答案 ...
- Nginx实战之让用户通过用户名密码认证访问web站点
1.Nginx实战之让用户通过用户名密码认证访问web站点 [root@master ~]# vim /usr/local/nginx/conf/extra/www.conf server { lis ...