NYOJ 737 合并石子(一)
石子合并(一)
- 描述
-
有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 合并石子(一)相关推荐
- 合并石子 区间dp水题
合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...
- 蒟蒻吃药计划-治疗系列 #round 2 合并石子+乘积最大
1.合并石子 <信息学奥赛一本通>第五版 P371 第三节 T1 我就直接开始讲吧: Warning:这个题目和 合并果子 不一样!不一样!不一样!不一样!不一样!不一样!不一样!不一样! ...
- 合并石子 四边形不等式优化
题目描述 有一排石子,共n 堆.现要将石子有次序地合并成一堆.规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.试设计一个算法,计算出将n堆石子合并成一堆的最小得分. ...
- 蓝桥杯-合并石子(java)
算法提高 合并石子 时间限制:2.0s 内存限制:256.0MB问题描述在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求 ...
- 合并石子(三种方法)
合并石子 题目 在一个操场上一排地摆放着N堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.请设计一个程序,计算出将N堆石子合并成 ...
- Luogu 1880 合并石子
Luogu 1880 合并石子 (线性动态规划) 经典的区间型动态规划. ---------------------------------- 题干:https://www.luogu.org/pro ...
- 有n堆石子,每次取出两堆合成一堆,每堆石子的个数即为合并石子所需要耗费的体力,求出合并所有石子堆所需要耗费的最小体力
有n堆石子,每次取出两堆合成一堆,每堆石子的个数即为合并石子所需要耗费的体力,求出合并所有石子堆所需要耗费的最小体力 典型的贪心题,即每次取出数量最少的两堆石子合并. 举个例子来说,假如有5堆石子,石 ...
- 洛谷 P1775 合并石子(弱化版)
文章目录 合并石子(弱化版) 一.题目描述 二.思路 三.代码 合并石子(弱化版) 一.题目描述 https://www.luogu.com.cn/problem/P1775 设有 N(N \le 3 ...
- 2021.06.03合并石子+能量项链
2021.06.03合并石子+能量项链 题目描述 在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. ...
最新文章
- datagrid的正反双向排序
- signature=066eaf4ada3cc7a99cb8d41fb298a3d4,Video Fusion Display Systems
- 解决VERSION 1.7 OF THE JVM IS NOT SUITABLE FOR THIS PRODUCT.
- win10无法检验服务器出示的ssl证书,win10系统网站启用ssL安全证书的操作方法
- Oracle 数据怎么实时同步到 Elasticsearch | 亲测干货建议收藏
- java源程序编译型_Java语言的源程序不是编译型的,而是编译解释型的。
- “减压”成今年前十个月关键词:80后压力最大
- java wps_通过WPS和WID方便地使用Java构件
- 送给程序员的 编程箴言
- Google Python Style Guide
- 菜鸟 学注册机编写之 “序列号组合”
- Introduction to Computer Networking学习笔记(二十一):TCP拥塞控制-基础、公平分配带宽准则
- Delphi XE10百集视频教程计划
- 烟台大学举办首届ACM程序设计大赛
- 计算机网络原理基础知识点总结
- wireshark密码嗅探侵入后台管理系统
- 发现一个识图比较厉害的网站
- 新年札记:自学系统补完计划
- 几种常见的中文分词包的分析与比较
- 合肥一中2021高考成绩查询,2021年合肥重点高中名单及排名,合肥高中高考成绩排名榜...