区间dp_1
来源:互联网 发布:淘宝店铺的运营管理 编辑:程序博客网 时间:2024/06/05 17:12
Description
现在有n堆石子,第i堆有ai个石子。现在要把这些石子合并成一堆,每次只能合并相邻两个,每次合并的代价是两堆石子的总石子数。求合并所有石子的最小代价。
Input
第一行包含一个整数T(T<=50),表示数据组数。
每组数据第一行包含一个整数n(2<=n<=100),表示石子的堆数。
第二行包含n个正整数ai(ai<=100),表示每堆石子的石子数。
Output
每组数据仅一行,表示最小合并代价。
Sample Input
241 2 3 453 5 2 1 4
Sample Output
1933
#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int n=200;int sto[n];int dp[n][n];//dp[i][j]表示从i到j的最优解int sum[n];int main(){ int T; int n; int i,j,k,len; scanf("%d",&T); while(T--) { scanf("%d",&n); sum[0]=0; for(i=1;i<=n;i++) { scanf("%d",&sto[i]); sum[i]=sum[i-1]+sto[i]; } memset(dp,0,sizeof(dp)); for(len=2;len<=n;len++)//长度 { for(i=1;i<=n-len+1;i++)//起始点 { j=i+len-1; dp[i][j]=10000000;//dp[i][j]表示从i到j的最优解 for(k=i;k<j;k++)//中间点 { //每次合并的代价是两堆石子的总石子数 dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]); } } } printf("%d\n",dp[1][n]); } return 0;}
0 0
- 区间dp_1
- dp_1
- 概率DP_1
- 动态规划-钢条切割--DP_1
- 区间
- 区间
- 区间选点+区间覆盖
- 插入区间,区间合并
- 区间修改,区间查询
- 区间查询
- 区间运算
- 区间树
- 区间计算
- Ruby区间
- 区间树
- 区间DP
- 区间合并
- 区间DP
- pom文件小记
- Android6.0权限问题
- LINUX/MIPS内核移植
- Redis数据结构详解之Zset(五)
- nodejs npm常用命令
- 区间dp_1
- html的header结构和实例
- CLIR CLIP
- Python黑帽编程2.6 模块
- 【Python】|Python中一个map()小应用
- vxworks开发基础
- javascript对象封装后转换为json
- android jni 编程
- java高级开发学习之--反射机制(1)