石子合并问题

xiaoxiao2022-06-03  6

import java.io.*; import java.util.Scanner; public class Problem3_3 { public static void main(String [] args) throws IOException { File inputfile = new File("input.txt"); File outputfile= new File("output.txt"); Scanner input = new Scanner(inputfile); PrintWriter output = new PrintWriter(outputfile); int sum = input.nextInt(); int stones [] = new int [sum+1]; for(int i=1;i<=sum;i++) stones[i] = input.nextInt(); int min = assign_Of_Min(sum,stones); System.out.println(); int max = assign_Of_Max(sum,stones); output.println(min); System.out.println(); output.println(max); input.close(); output.close(); System.out.println("结束"); } public static int assign_Of_Min(int n,int [] arrays) { int [][] matrix = new int [n+1][n+1]; for(int i=1;i<=n;i++) matrix[i][i]=arrays[i]; for(int i=2;i<=n;i++) { for(int j=1;j<=n-i+1;j++) { int z = i+j-1; matrix[j][z] = matrix[j][j]+scores(j,z,j,arrays)+matrix[j+1][z]; //+matrix[j+1][z]+ int p; for(int k=j+1;k<z;k++) { p = scores(j,z,k,arrays)+matrix[j][k]+matrix[k+1][z];//+matrix[k+1][z] if(p<matrix[j][z]) matrix[j][z]=p; } } } showMatrix(matrix); return matrix[1][n]; } public static int assign_Of_Max(int n,int [] arrays) { int [][] matrix = new int [n+1][n+1]; for(int i=1;i<=n;i++) matrix[i][i]=arrays[i]; for(int i=2;i<=n;i++) { for(int j=1;j<=n-i+1;j++) { int z = i+j-1; matrix[j][z] = matrix[j][j]+scores(j,z,j,arrays)+matrix[j+1][z]; //+matrix[j+1][z]+ int q; for(int k=j+1;k<z;k++) { q = scores(j,z,k,arrays)+matrix[j][k]+matrix[k+1][z];//+matrix[k+1][z] if(q>matrix[j][z]) matrix[j][z]=q; } } } showMatrix(matrix); return matrix[1][n]; } public static int scores(int low,int high,int k,int [] scores) { if(low<1||high>scores.length-1) { System.out.println("you input is wrong"); return 0; } else { if(low==high) return 0; else if(low+1==high) return 0; else { int sumofLeft,sumOfRight; sumofLeft=sumOfRight=0; if(low==k) sumofLeft=0; else{ for(int i=low;i<=k;i++) { sumofLeft += scores[i]; } } if(k+1==high) sumOfRight=0; else{ for(int j=k+1;j<=high;j++){ sumOfRight += scores[j]; } } return sumOfRight+sumofLeft; } } } public static void showMatrix(int [][] array){ for(int i=1;i<array.length;i++){ for(int j=1;j<array[i].length;j++) System.out.printf("- ",array[i][j]); System.out.println(); } } }

 

转载请注明原文地址: https://www.6miu.com/read-4915062.html

最新回复(0)