题目一:最佳加法表达式
解题代码:
package 第十二天动态规划;
import java.util.Scanner;
public class 最佳加法表达式 {
public static void main(String[] args) {
int m;
int time;
Scanner scanner=new Scanner(System.in);
m=scanner.nextInt();
time=scanner.nextInt();
int [] a=new int[m];
for(int i=0;i<a.length;i++){
a[i]=(int)(Math.random()*10);
}
System.out.println("整数串为:");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
J j =new J();
j.bp(a,time,m);
}
}
class J{
void bp(int []a,int t,int m){
int o=10000;
int max=100;
int d;
int i,j,min,k;
int [][] num=new int[m][m];
int [][] f=new int[m+1][t+1];
for(i=0;i<m;i++){
for(j=0,d=0;j<m;j++){
if(i>j){
num[i][j]=0;
}else{
d=d*10+a[j];
num[i][j]=d;
}
}
}
for(i=1;i<=m;i++) {
for (j = 0; j <= t; j++) {
if (j >= i) {
f[i][j] = o;
} else if (j == 0) {
f[i][j] = num[0][i - 1];
// }
} else {
for (min = o, k = 1; k < i; k++) {
f[i][j] = f[i - k][j - 1] + num[i - k][i - 1];
if (min > f[i][j]) {
min = f[i][j];
}
}
f[i][j] = min;
}
}
}
System.out.println(f[m][t]);
}
}