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

石子合并问题期末报告 一、问题分析 1.1问题内容描述 在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。 1.2 问题的基本要求 对于任意给定的n堆石子,计算合并成一堆的最小得分和最大得分。 1.3分析 环形结构,经常采用双倍长度线性化手段,也就是说,把环形结构看成是长度为环的两倍的线性结构来处理,应用动态规划。 二、设计思路 2.1描述解决方案 阅读详情

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

在这里插入图片描述

算法分析作业答案:石子合并问题 算法分析作业答案:石子合并问题,算法的分析与设计 题目:在一个打操场上摆放着一行共N堆石子。。。 立即下载

相关推荐

算法设计与分析:石子合并问题

问题描述:在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选择相邻的两堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。

【算法设计与分析】动态规划解决石子合并问题(课程设计)

动态规划算法是计算机算法设计中的一个重要算法,通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式去解决,石子合并问题作为典型算例,能够彰显动态规划算法特征 针对石子合并问题,本文利用动态规划算法寻求石子合并时的最大,最小得分,选择相邻的两堆石子堆进行合并,其最终花费的代价与石子堆的排列顺序有关。根据其重叠子问题建立状态转移方程,利用程序进行求解。算例结果显示:将4堆石子合并成一堆,每堆的石子个数分别是4,4,5,9,合并的代价最小得分为43,最大得分为54

qq_44871101的博客 1万+

华为私有云HCS 8.1.1实战:从镜像制作到云主机发放全流程指南

本文详细解析了华为私有云HCS 8.1.1从镜像制作到云主机发放的全流程实战指南。内容涵盖制作标准化QCOW2镜像、配置云主机规格与主机组、规划外部网络,以及在运营面为租户初始化资源、配置审批流与产品目录。最后,通过用户视角演示了从创建VPC网络到申请、审批并最终绑定EIP访问云主机的完整操作步骤,为运维人员和架构师提供了一套清晰、可落地的HCS部署与管理实践方案。

weixin_29305313的博客 1124

石子合并系列问题

动态规划中的石子合并系列问题 设有N堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。找出一种合理的方法,使总的代价最小,输出最小代价。将N堆石子绕圆形操场摆放,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数记为该次合并的得分。

Hoper-J的博客 6023

标准高斯过程回归(Gaussian Processes Regression, GPR)从零开始,公式推导

标准高斯过程回归从零开始公式推导

qq_43587949的博客 1万+

[软考]系统架构设计师 备考经验分享(一) - 备考计划篇

前言 上周末刚刚结束了软考架构师的考试,自我感觉考的还可以,大概率是过了。 两次参加软考,一次中级嵌入式,一次高级架构师,都是备考不到两个月时间,尤其是架构师这次考试内容和本职工作有不小的差别,并且需要同时备考三个科目,在高强度地备考中感觉是摸索出到了一点软考的技巧与经验。 打算趁还记得,赶紧写几篇文章做下梳理总结,算是给将来自己考系分、高项或者其他考试做个记录,也希望能够帮到正在备考的大家。 先把第一步,个人的备考计划分享给大家。 自身情况分析 首先,请大家一定先明确三个问题,这三个问题会直接影响到你的

_ 6404

石子合并问题

(1)有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动相邻的2堆石子合并,合并花费为新合成的一堆石子的数量。求将这N堆石子合并成一堆的总花费最小(或最大)。 #include <iostream> #include <cstdlib> #include <cstring> #include <string> #include &lt...

Wabrush的博客 487

YOLOv8 ultralytics使用笔记----labelme标记数据,训练模型、追踪目标。

Ultralytics是一个Python库,它是为执行高级计算机视觉任务而创建的,如对象检测、实例分割、图像分类等。Ultralytics为YOLO模型发布了一个全新的存储库,它被构建为用于机器视觉统一框架。这里先利用,并激活。

qq_48050838的博客 1万+

石子合并简化版 pta

将 n 堆石子排放在一条直线上,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数 n 及每堆的石子数,并进行如下计算:选择一种合并石子的方案,使得做 n−1 次合并得分总和最小。输入第一行一个整数 n,表示有 n 堆石子(n.........

wzx_442011334的博客 1434

5分钟搞定!用扣子空间LinkReaderPlugin快速搭建网页内容抓取机器人(附Python复现代码)

本文详细介绍了如何利用扣子空间的LinkReaderPlugin快速搭建网页内容抓取机器人,仅需5分钟即可完成配置。通过Python复现代码和可视化工作流,开发者可以轻松实现智能网页抓取,提升数据采集效率。文章还探讨了与RAG工作流的集成方案及性能优化技巧,适用于金融监控、电商追踪等多种场景。

study的专栏 1092

N32在Keil中J-Link识别失败的排查与修复指南

本文详细解析了在Keil开发环境中,J-Link调试器无法识别N32系列MCU的常见问题。通过分步指导,从检查修改Keil工程配置文件、更新J-Link驱动,到手动添加N32专用设备支持包,系统性地提供了排查与修复方案,帮助开发者快速恢复调试连接,确保开发流程顺畅。

300

GarsiaWachs算法:石子归并问题 (ccf 压缩编码 原型)

N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。   例如: 1 2 3 4,有不少合并方法 1 2 3 4 =&gt; 3 3 4(3) =&gt; 6 4(9) =&gt; 10(19) 1 2 3 4 =&gt; 1 5 4(5) =&gt; 1 9(14) =&g...

qq_36736330的博客 550

从 0 到 1:基于深度学习的图像识别系统开发实战

图像识别是指让计算机能够识别和理解图像中的内容,通常是通过计算机视觉技术来实现。深度学习,尤其是卷积神经网络(CNN),已经成为图像识别中最为流行和有效的技术。数据采集和预处理:获取并处理图像数据,使其适合于模型训练。模型训练:使用深度学习算法(如 CNN)训练模型,以学习图像中的特征。模型评估与优化:评估模型的性能,并通过调整超参数、优化算法等方法提高精度。模型部署与应用:将训练好的模型应用于实际的图像识别任务中。本文将带领你通过一个简单的图像分类问题,开发一个深度学习图像识别系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1217

高级算法设计与分析期末复习

研究生期末算法设计与分析复习

qq_52686989的博客 4590

基于MATLAB/Simulink平台进行新能源微电网运行控制的建模与仿真

新能源微电网是现代电力系统的重要组成部分,能够有效整合分布式能源(如光伏、风力发电)和储能设备,实现局部区域内的能源高效利用。微电网的运行控制涉及多源能量管理、负荷平衡以及并网/孤岛模式切换等关键问题。基于MATLAB/Simulink平台进行新能源微电网运行控制的建模与仿真,可以帮助研究者验证控制策略的有效性,并优化系统的动态性能和经济性。本项目旨在构建一个完整的新能源微电网模型,包括电源模块、储能模块、负荷模块以及控制器模块,并通过仿真分析其运行特性。

xiaoheshang_123的博客 420

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【石子合并】

【石子合并】     在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。     试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。 【输入文件】  包含两行,第1 行是正整数n(1  第2行有n个数,分别表示每堆石子的个数。 【输出文件】  输出两行。  第1

先疯盗骨 570

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

石子合并(动态规划DP)

时限: 1000ms 内存限制:10000K 总时限:3000ms 描述: 在一个圆形操场的四周摆放着n堆石子(n<= 100),现要将石子有次序地合并成一堆。规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 编一程序,读入石子堆数n及每堆的石子数(<=20)。选择一种合并石子的方案,使得做n-1次合并,得分的总和最小; 比如有4堆石子:...

weixin_30393907的博客 83

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SDUT-OJ 2025-2026第一学期《算法设计与分析》动态规划算法实验

山东理工大学OJ《算法分析与设计》动态规划算法实验

ziyu1845553146的博客 1223

动态规划解石子合并问题

//原文出自 http://www.cnblogs.com/SCAU_que/articles/1893979.html,我只是照着思路敲了一遍, 关于石子合并问题,大家还可以看看这两文章 http://www.hnyzsz.net/Article/ShowArticle.asp?ArticleID=735 http://hi.baidu.com/%E5%E3%E5%E3%B5%C4%C0%

醉翁的专栏 1091

动态规划

描述 Description     在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S

wbainngg123的专栏 416

2025年春季学期《算法分析与设计》练习8

他的午餐预算是M元,现在有N种菜品,每一种菜品的价格和能够提供的体力值已知(每种菜品只能选择一次),请问如何选择菜品能够让XP下午的体力值最大呢?在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。例如:输入{1,2,3,4,5},输出33。【3+6+9+15=33】第2行到第n+1行分别对应于第1种道具到第n种道具的信息,每1行包含三个正整数,两个数字之间用空格隔开,三个正整数分别表示某一种道具的数量、单个道具的价格和魅力值。

weixin_73947887的博客 1139

一道算法作业题(续)

Description 在一个圆形操场的四周摆放着n堆石子,现要将石子有次序地合并成一堆。规定每次只能选择相邻的两堆石子合并成新的一堆,并将新一堆石子数记为该次合并的得分。试设计一个动态规划算法,计算出将n堆石子合并成一堆的最小得分和最大得分,要求列出递归方程,写出算法的伪代码并分析算法的时间空间复杂性。 分析 要求每次合并必须是相邻的,和矩阵链乘的括号作用差不多。可以考虑往矩阵链乘最...

ditang2322的博客 950

信息学奥赛必备:区间动态规划经典题目详解与优化技巧

本文深入解析信息学奥赛中区间动态规划的核心技术,重点讲解石子合并问题的经典解法与优化策略。涵盖基础状态转移方程、环形排列处理技巧(破环为链法),以及四边形不等式优化和Garsia-Wachs算法等高级优化方法,帮助竞赛选手提升算法效率与解题能力。

e4f5g6h7的博客 494
上一篇: 算法设计与分析——回溯法——符号三角形问题
下一篇: 算法设计与分析——回溯法——旅行售货员问题
943802606
博客等级 码龄6年 1万+粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值