动态规划:圆形石子合并问题
为什么80%的码农都做不了架构师?>>> 问题描述: 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。 试设计一个算法,计算出将n堆石子合并成一堆的最小得分。 import java.util.Scanner; public class Test { /* * 圆形石子问题动态规划解法。 * p[i] 表示第i堆石子的个数。 * sum[i][j] 表示从第i堆石子开始,长度为j的各堆石子的总分。 * dp[i][j] 表示从第i堆石子开始,长度为j的各堆石子的最优组合的分数,即分数最小。 * 其中dp[i][1]=0; * dp[i][j]=min(dp[i][k]+dp[(i+k-1)%n+1][j-k]+sum[i][j]),其中1<=k<j */ public static void main(String[] args){ Scanner reader = new Scanner(System.in); int n = reader.nextInt(); int[] p = new int[n+1]; int[][] sum = new int[n+1][n+1]; int[][] dp = new int[n+1][n+1]; for(int i=1;i<=n;i+