沙子合并
来源:互联网 发布:java好友列表界面 编辑:程序博客网 时间:2024/04/29 03:25
问题描述:
设有n堆沙子,其编号为A1,A2,A3……An,每堆沙子都有一定的数量,例如:
13 7 8 16 21 4 18
现在要将n堆沙子归并成一堆,归并的过程为每次只能将相邻的两堆沙子堆成一堆,这样经过n-1次归并后成为一堆。
归并的代价是这样定义的:将两堆沙子归并为一堆时,两堆沙子的数量的和称为归并两堆沙子的代价。
问题:但n堆沙子的数量给出之后,找出一种合理的归并方法,使总的归并代价为最小。
输入样例:
13 7 8 16 21 4 18
输出样例:
239
区间dp,枚举切开的位置
dp(i,j)=dp(i,k)+dp(k+1,j)+sum[i,k]+sum[k+1,j]; i<=k<=j-1 ,当i==j时dp(i,j)=0;
预先处理sum,表示i到j的和
int[][] sum=new int[n+1][n+1];
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=i;k<=j;k++)
sum[i][j]+=num[k];
DP部分
public static int dp(int[] num,int start,int end,int[][] sum)
{
if(start==end)
return 0;
int min=Integer.MAX_VALUE;
for(int k=start;k<=end-1;k++)
{
int temp=dp(num, start, k,sum)+dp(num,k+1,end,sum)+sum[start][k]+sum[k+1][end];
if(temp<min)
min=temp;
}
return min;
}
- 沙子合并
- 沙子合并
- 沙子合并
- P1055沙子合并
- tyvj 1055 沙子合并
- 沙子合并 动态规划
- TYVJ 1055 沙子合并
- 1382 沙子合并
- tyvj1055 沙子合并
- 沙子合并-dp
- 洛谷【T8732】 合并沙子
- Tyvj 1055 沙子合并 DP
- 动态规划之沙子合并
- tyvj1055 沙子合并 (区间dp)
- |Tyvj|NOI1995|动态规划|P1055 沙子合并
- 沙子的质量(石子合并)
- 沙子
- 沙子合并、石子合并、能量项链解题报告。
- 从BlueSky.h和BlueSky.cpp到BlueSky.out的那些事儿
- C++11编译器支持列表
- 浅谈测试驱动开发(TDD)
- 计算机网络中的TCP/UDP协议到底是怎么回事(一)
- POJ 2395 Out of Hay
- 沙子合并
- ld: -pie can only be used when targeting iOS 4.2 or later clang: error: linker command failed with e
- WebView 写一个自己的简单浏览器
- LeetCode——037
- HDU 5665 Lucky
- Java:关于super()的用法
- java jar war 打包解压命令
- 30分钟了解C++11新特性
- POJ 2377 Bad Cowtractors