石子合并(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述
    有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。

输入
有多组测试数据,输入到文件结束。
每组测试数据第一行有一个整数n,表示有n堆石子。
接下来的一行有n(0< n <200)个数,分别表示这n堆石子的数目,用空格隔开
输出
输出总代价的最小值,占单独的一行
样例输入
3
1 2 3
7
13 7 8 16 21 4 18
样例输出
9
239

AC码:

#include<stdio.h>
#include<string.h>
#define INF 2000000005
int dp[203][203],sum[203]={0};
int DP(int left,int right)
{if(dp[left][right]>=0)  // 某一个区间左端到右端已经得到最优方案return dp[left][right];if(left==right)         // 说明该区间就一堆石子{return dp[left][right]=0;}int min,mid;for(mid=left;mid<right;mid++){if(dp[left][right]<0)dp[left][right]=INF;// 核心:动态转移方程min=DP(left,mid)+DP(mid+1,right)+(sum[mid]-sum[left-1])+(sum[right]-sum[mid]);if(min<dp[left][right])dp[left][right]=min;}return dp[left][right];
}
int main()
{int n,i,a;while(~scanf("%d",&n)){// n表示石子的堆数for(i=1;i<=n;i++){scanf("%d",&a); // a依次表示第i堆的石子数sum[i]=a+sum[i-1];}memset(dp,-1,sizeof(dp));printf("%d\n",DP(1,n));}return 0;
}

区间DP问题!

#include<stdio.h>
#define INF 2000000005
int dp[205][203],sum[203];
int min(int a,int b)
{return a>b?b:a;
}
int main()
{int n,a;while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%d",&a);sum[i]=sum[i-1]+a;dp[i][i]=0;}// 区间DPfor(int count=2;count<=n;count++){   // 遍历合并count=2堆、3堆、...n堆的情况for(int start=1;start<=n-count+1;start++){   // start表示每个区间的始点int end=start+count-1;  // end表示对应的该区间的终点dp[start][end]=INF;for(int mid=start;mid<=end;mid++){dp[start][end]=min(dp[start][end],dp[start][mid]+dp[mid+1][end]+sum[end]-sum[start-1]);}}}printf("%d\n",dp[1][n]);}return 0;
}

NYOJ 737 合并石子(一)相关推荐

  1. 合并石子 区间dp水题

    合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...

  2. 蒟蒻吃药计划-治疗系列 #round 2 合并石子+乘积最大

    1.合并石子 <信息学奥赛一本通>第五版 P371 第三节 T1 我就直接开始讲吧: Warning:这个题目和 合并果子 不一样!不一样!不一样!不一样!不一样!不一样!不一样!不一样! ...

  3. 合并石子 四边形不等式优化

    题目描述 有一排石子,共n 堆.现要将石子有次序地合并成一堆.规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.试设计一个算法,计算出将n堆石子合并成一堆的最小得分. ...

  4. 蓝桥杯-合并石子(java)

    算法提高 合并石子 时间限制:2.0s 内存限制:256.0MB问题描述在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求 ...

  5. 合并石子(三种方法)

    合并石子 题目 在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.请设计一个程序,计算出将N堆石子合并成 ...

  6. Luogu 1880 合并石子

    Luogu 1880 合并石子 (线性动态规划) 经典的区间型动态规划. ---------------------------------- 题干:https://www.luogu.org/pro ...

  7. 有n堆石子,每次取出两堆合成一堆,每堆石子的个数即为合并石子所需要耗费的体力,求出合并所有石子堆所需要耗费的最小体力

    有n堆石子,每次取出两堆合成一堆,每堆石子的个数即为合并石子所需要耗费的体力,求出合并所有石子堆所需要耗费的最小体力 典型的贪心题,即每次取出数量最少的两堆石子合并. 举个例子来说,假如有5堆石子,石 ...

  8. 洛谷 P1775 合并石子(弱化版)

    文章目录 合并石子(弱化版) 一.题目描述 二.思路 三.代码 合并石子(弱化版) 一.题目描述 https://www.luogu.com.cn/problem/P1775 设有 N(N \le 3 ...

  9. 2021.06.03合并石子+能量项链

    2021.06.03合并石子+能量项链 题目描述 在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. ...

最新文章

  1. datagrid的正反双向排序
  2. signature=066eaf4ada3cc7a99cb8d41fb298a3d4,Video Fusion Display Systems
  3. 解决VERSION 1.7 OF THE JVM IS NOT SUITABLE FOR THIS PRODUCT.
  4. win10无法检验服务器出示的ssl证书,win10系统网站启用ssL安全证书的操作方法
  5. Oracle 数据怎么实时同步到 Elasticsearch | 亲测干货建议收藏
  6. java源程序编译型_Java语言的源程序不是编译型的,而是编译解释型的。
  7. “减压”成今年前十个月关键词:80后压力最大
  8. java wps_通过WPS和WID方便地使用Java构件
  9. 送给程序员的 编程箴言
  10. Google Python Style Guide
  11. 菜鸟 学注册机编写之 “序列号组合”
  12. Introduction to Computer Networking学习笔记(二十一):TCP拥塞控制-基础、公平分配带宽准则
  13. Delphi XE10百集视频教程计划
  14. 烟台大学举办首届ACM程序设计大赛
  15. 计算机网络原理基础知识点总结
  16. wireshark密码嗅探侵入后台管理系统
  17. 发现一个识图比较厉害的网站
  18. 新年札记:自学系统补完计划
  19. 几种常见的中文分词包的分析与比较
  20. 合肥一中2021高考成绩查询,2021年合肥重点高中名单及排名,合肥高中高考成绩排名榜...

热门文章

  1. 命令行编译xcodebuild
  2. 前端学PHP之PHP操作memcache
  3. github 使用记录
  4. 【小技巧】Xcode7.1中KSImageNamed无效的解决方法
  5. get方式乱码及MAC异常
  6. 联想K系引领智能电视潮流,Android 4.0将成行业标配
  7. web工作流管理系统开发之十九 工作流系统的事务处理
  8. PHD considerations
  9. 亲测有用的markdown博客生成器
  10. 【转】dijkstra算法