UVa 10003 - Cutting Sticks

来源:互联网 发布:js中有标量类型吗 编辑:程序博客网 时间:2024/05/22 17:22
import java.util.Arrays;import java.util.Scanner;/*UVa 10003 - Cutting Sticks   * 最小矩阵链成类似 状态转移方程  f(i,j) = min {f(i,k) + f(k,j) + (c[j]-c[i])} * 由于划分阶段比较困难 选择使用记忆化搜索 * */class Main {static final int MAX = 55;int[][] f = new int[MAX][MAX];int[] c = new int[MAX];public static void main(String[] args) {int l;Scanner scanner = new Scanner(System.in);Main m = new Main();while((l = scanner.nextInt()) > 0) {int n = scanner.nextInt();for(int i=1; i<=n; i++) m.c[i] = scanner.nextInt();m.c[0] = 0;m.c[n+1] = l;//添加头尾节点for(int i=0; i<MAX; i++) Arrays.fill(m.f[i], -1);System.out.println("The minimum cutting is " + m.dp(0,n+1) + ".");}}private int dp(int i, int j) {if(j == i+1) return f[i][j] = 0;//不能再切割if(f[i][j] != -1) return f[i][j];f[i][j] = Integer.MAX_VALUE;for(int k=i+1; k<j; k++) {f[i][j] = Math.min(f[i][j], dp(i,k) + dp(k,j) + c[j]-c[i]);}return f[i][j];}}

原创粉丝点击