算法设计与分析——动态规划——石子合并问题
1.石子合并问题
在一个圆形操场的四周摆放着n堆石子。现要将石子有序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define Ma_x 99999
#define Mi_x 0
#define min(a,b) a<b?a:b
#define max(a,b) a>b?a:b int n,w[200],dp[200][200],dq[200][200];
//n表示堆数,w表示每队的数量,dp[i][j]表示从第i堆开始合并j堆(包括第i堆)后的最小花费 ,dq表示最大 int sum(int i,int t){//从第i堆开始,t个石堆合,最后一次的合并的花费 int k,s=0,k1;for(k=i;k<i+t;k++){k1=k%n;if(k1==0) k1=n;s=s+w[k1]; }return s;
}void stone_problem()
{for(int t=2;t<=n;t++){for(int i=1;i<=n;i++){dp[i][t]=Ma_x;dq[i][t]=Mi_x; for(int k=1;k<t;k++){dp[i][t]=min(dp[i][t],dp[i][k]+dp[(i+k-1)%n+1][t-k]+sum(i,t));dq[i][t]=max(dq[i][t],dq[i][k]+dq[(i+k-1)%n+1][t-k]+sum(i,t));}}}int mini=Ma_x;int maxi=Mi_x; for(int i=1;i<=n;i++){//从第几堆石子开始结果最小 mini=min(mini,dp[i][n]); maxi=max(maxi,dq[i][n]); }cout<<"输出合并成一堆的最小花费为:"<<mini<<endl;cout<<"输出合并成一堆的最小花费为:"<<maxi<<endl;}
int main(){cout<<"输入石子的堆数";cin>>n;for(int i=1;i<=n;i++){cin>>w[i];dp[i][1]=0;//表示合并一堆的花费,没有合并则花费为0 dq[i][1]=0; }stone_problem();
}
算法设计与分析——动态规划——石子合并问题相关推荐
- 算法设计与分析-----动态规划
算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...
- 算法设计与分析——动态规划(二):钢条切割
分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...
- 算法设计与分析——动态规划(五):最长公共子序列
分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...
- 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...
动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...
- 算法设计与分析——动态规划(一)矩阵连乘
动态规划--Dynamic programming,可以说是本人一直没有啃下的骨头,这次我就得好好来学学Dynamic programming. OK,出发! 动态规划通常是分治算法的一种特殊情况,它 ...
- 算法设计与分析——动态规划——数字三角形问题
数字三角形问题 1.题目描述:给定一个由n行数字组成的数字三角形,如图3-7所示.设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 算法设计:对于给定的由n行数字组成的数字 ...
- 算法设计与分析—动态规划算法
动态规划算法 1.动态规划算法基本思想 2.动态规划算法求解步骤 3. 0-1背包问题 在现实生活中,存在这样一类问题,它们的活动过程不仅可以分成若干阶段,而且在任意一个阶段(不妨设为第i个阶段)以后 ...
- 算法设计与分析——动态规划——矩阵连乘问题
动态规划与分治法的异同: 相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解. 差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题 ...
- 算法设计与分析——动态规划——01背包问题
#include<iostream> #include<iomanip> using namespace std; //前i个物品装入容量为j的背包中获得的最大价值//0-1背 ...
最新文章
- 网络推广外包浅析当下网站优化处于健康状态有利于网络推广外包
- Python实现1-9数组形成的结果为100的所有运算式
- ASP.NET MVC Model绑定(二)
- 生信多组学整合工具的比较研究
- AI顶会直播丨深度学习顶级会议ICLR 2021中国预讲会明天召开,为期三天五大论坛...
- 【Linux】一步一步学Linux——dnsdomainname命令(174)
- F5与Ctrl+F5及地址栏输入地址回车
- Spring AOP自动创建代理 和 ProxyFactoryBean创建代理
- 从IT的角度思考BIM(二):模式与框架
- SplitContainer如何实现左导航,右显示与导航相关内容
- 为什么MySQL不建议使用NULL作为列默认值?
- 如何查看 Swift 的源代码
- 概率图模型在图像处理中的应用
- iai控制器服务器ON信号,IAI电缸产品控制方法的知识.pdf
- excel取消隐藏_excel批量取消工作表隐藏,困绕我们N年的问题终于有了答案!
- ubuntu使用ffmpeg截取视频
- win10 6种截图方法 简介
- 计算机内存分为两种他们是,计算机内存主要有哪两种?他们的主要特点是什么?...
- cmake:add_library生成静态库和动态库
- 【数字电路抢救】3 逻辑函数的卡诺图化简
热门文章
- API网关Ocelot 使用Polly 处理部分失败问题
- git stash参数介绍
- C和指针之数组之编程练习2
- ubuntu之find方法
- Android之HttpClient 和HttpResponse 小结
- python本地库_Python学习第71课-本地建立repository仓库
- java 优秀源码_想要快速进阶Java架构师?这份超强(长)学习计划单 请签收!...
- 为什么说,每个人都应该多读些书?
- 三年磨一剑,五次被拒稿,交大博士坚持稿件申诉,终发表学科顶刊
- 绝对不能错过!2009~2019 高中数学联赛11年真题解析