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();
} 

算法设计与分析——动态规划——石子合并问题相关推荐

  1. 算法设计与分析-----动态规划

    算法设计与分析-----动态规划(c语言) 一.动态规划 1.定义 2.动态规划问题的解法 3.动态规划求解的基本步骤 4.动态规划与其他方法的比较 5.求解整数拆分问题 6.求解最大连续子序列和问题 ...

  2. 算法设计与分析——动态规划(二):钢条切割

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  3. 算法设计与分析——动态规划(五):最长公共子序列

    分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...

  4. 计算机算法设计与分析 动态规划 实验报告,动态规划法解最长公共子序列(计算机算法设计与分析实验报告).doc...

    动态规划法解最长公共子序列(计算机算法设计与分析实验报告) 实报 告 实验名称:任课教师::姓 名:完成日期:二.主要实验内容及要求: 要求按动态规划法原理求解问题: 要求交互输入两个序列数据: 要求 ...

  5. 算法设计与分析——动态规划(一)矩阵连乘

    动态规划--Dynamic programming,可以说是本人一直没有啃下的骨头,这次我就得好好来学学Dynamic programming. OK,出发! 动态规划通常是分治算法的一种特殊情况,它 ...

  6. 算法设计与分析——动态规划——数字三角形问题

    数字三角形问题 1.题目描述:给定一个由n行数字组成的数字三角形,如图3-7所示.设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 算法设计:对于给定的由n行数字组成的数字 ...

  7. 算法设计与分析—动态规划算法

    动态规划算法 1.动态规划算法基本思想 2.动态规划算法求解步骤 3. 0-1背包问题 在现实生活中,存在这样一类问题,它们的活动过程不仅可以分成若干阶段,而且在任意一个阶段(不妨设为第i个阶段)以后 ...

  8. 算法设计与分析——动态规划——矩阵连乘问题

    动态规划与分治法的异同: 相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解. 差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题 ...

  9. 算法设计与分析——动态规划——01背包问题

    #include<iostream> #include<iomanip> using namespace std; //前i个物品装入容量为j的背包中获得的最大价值//0-1背 ...

最新文章

  1. 网络推广外包浅析当下网站优化处于健康状态有利于网络推广外包
  2. Python实现1-9数组形成的结果为100的所有运算式
  3. ASP.NET MVC Model绑定(二)
  4. 生信多组学整合工具的比较研究
  5. AI顶会直播丨深度学习顶级会议ICLR 2021中国预讲会明天召开,为期三天五大论坛...
  6. 【Linux】一步一步学Linux——dnsdomainname命令(174)
  7. F5与Ctrl+F5及地址栏输入地址回车
  8. Spring AOP自动创建代理 和 ProxyFactoryBean创建代理
  9. 从IT的角度思考BIM(二):模式与框架
  10. SplitContainer如何实现左导航,右显示与导航相关内容
  11. 为什么MySQL不建议使用NULL作为列默认值?
  12. 如何查看 Swift 的源代码
  13. 概率图模型在图像处理中的应用
  14. iai控制器服务器ON信号,IAI电缸产品控制方法的知识.pdf
  15. excel取消隐藏_excel批量取消工作表隐藏,困绕我们N年的问题终于有了答案!
  16. ubuntu使用ffmpeg截取视频
  17. win10 6种截图方法 简介
  18. 计算机内存分为两种他们是,计算机内存主要有哪两种?他们的主要特点是什么?...
  19. cmake:add_library生成静态库和动态库
  20. 【数字电路抢救】3 逻辑函数的卡诺图化简

热门文章

  1. API网关Ocelot 使用Polly 处理部分失败问题
  2. git stash参数介绍
  3. C和指针之数组之编程练习2
  4. ubuntu之find方法
  5. Android之HttpClient 和HttpResponse 小结
  6. python本地库_Python学习第71课-本地建立repository仓库
  7. java 优秀源码_想要快速进阶Java架构师?这份超强(长)学习计划单 请签收!...
  8. 为什么说,每个人都应该多读些书?
  9. 三年磨一剑,五次被拒稿,交大博士坚持稿件申诉,终发表学科顶刊
  10. 绝对不能错过!2009~2019 高中数学联赛11年真题解析