石子合并(一排的和一个环的)

news/2025/9/27 12:12:46/文章来源:https://www.cnblogs.com/-114514/p/19114892

石子合并

石子合并是环形dp的经典题,要做它我们首先要做它的弱化版,也就是排成一排的情况:石子合并(弱化版)(洛谷p1775)

石子合并弱化版解法

对于这道题,可以先从简单的情况开始考虑;比如现在要合并a,b,c三堆石子,那么显然只有先合并a,b两队石子和先合并b,c两队石子两种情况,也就是说:

\[f[1][3]=min(f[1][2]+f[3][3],f[1][1]+f[2][3])+v[1][3]; \]

\[//f[i][j]表示合并第i到第j堆石子所要花费的代价,v[i][j]表示第i到j堆石子的总质量 \]

同样的,对于4堆石子a,b,c,d,可以先合并b,c,d,也可以先合并a,b,也可以先合并a,b,c,即可以从a,b,c,d之间的三个空隔中的任意一个隔开,将石子分成两堆,然后分别合并两堆,最后找代价的最小值;

于是就可以得到这样的一个dp思路:枚举一个L表示合并的区间长度从1到n(n是石子堆数),然后在每一个区间内再枚举断点k,求出每个区间所用代价的最小值,最后的答案落在区间[1,n];这种通过短区间转移到大区间的dp思路就是区间dp;

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n,m[305],f[305][305],v[305][305];//f和V的含义同上
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>m[i];}for(int i=1;i<=n;i++){for(int j=i;j<=n;j++){v[i][j]=v[i][j-1]+m[j];//处理出所有区间的石子重量和}}for(int l=1;l<n;l++){//枚举区间长度for(int i=1;i<=n-l;i++){int j=i+l;f[i][j]=0x3f3f3f3f;for(int k=i;k<j;k++){//枚举断点f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+v[i][j]);//转移方程}}}cout<<f[1][n];//答案落在区间[1,n]return 0;
}

石子合并

p1880
接下来就可以怎么把刚才的做法变成环形的,显然最容易想到的做法就是破环为链,这样就可以套用刚才的做法了;但是如果这样做就需要枚举在原序列的每一个点上破环得到的结果,时间复杂度无法接受;

其实可以想到这样一种思路:同样是破环为链,但是我可以保证只在破环之后的这个新序列上做一次区间dp可以覆盖到所有情况;有没有这样的处理方法呢?显然是有的:把原序列复制一遍接到它后面就可以了;比如对于序列4 7 3 5,处理之后的新序列就是4 7 3 5 4 7 3 5;可以发现新序列上每一个长度为4的区间就是破环为链的一种结果;

代码如下:

#include<bits/stdc++.h>
using namspace std;
int n,m[210],f[210][210],v[210][210],f2[210][210];//f是最小值,f2是最大值
int main(){int ans1=0x3f3f3f3f,ans2=-0x3f3f3f3f;cin>>n;for(int i=1;i<=n;i++){cin>>m[i];}for(int i=n+1;i<=n+n;i++){//复制一遍原序列m[i]=m[i-n];}for(int i=1;i<=n+n;i++){for(int j=i;j<=n+n;j++){v[i][j]=v[i][j-1]+m[j];}}for(int l=1;l<n;l++){//枚举的区间长度仍然是原序列的长度for(int i=1;i<=n+n-l;i++){int j=i+l;f[i][j]=0x3f3f3f3f;f2[i][j]=-0x3f3f3f3f;for(int k=i;k<j;k++){f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+v[i][j]);f2[i][j]=max(f2[i][j],f2[i][k]+f2[k+1][j]+v[i][j]);//相同的转移方法}}}for(int i=1;i<=n;i++){//求出所有情况的最值ans1=min(ans1,f[i][i+n-1]);ans2=max(ans2,f2[i][i+n-1]);}cout<<ans1<<endl<<ans2;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

思维题练习

思维题题解合集本文选取题目源于此处,以及一些平时的好的思维题。 大体按照主观难度排序。[FJCPC 2025] 构造大师贝贝 注意到 \(T\leq1000\),但是 \(n\leq10^{12}\)。那么从时间复杂度的角度考虑,应当为一个类似于 …

NXP - 用MCUXpresso IDE导入lpcopen_2_10_lpcxpresso_nxp_lpcxpresso_1769.zip中的工程 - 教程

NXP - 用MCUXpresso IDE导入lpcopen_2_10_lpcxpresso_nxp_lpcxpresso_1769.zip中的工程 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…

US$42 BDM01 Adapter for Yanhua Mini ACDP Module1 BMW CAS1-CAS4+

BDM01 Adapter for Yanhua Mini ACDP Module1 BMW CAS1-CAS4+Package List:1pc x BDM01 Adapter for Yanhua Mini ACDP Module1 Pictures of BDM01 Adapter for Yanhua Mini ACDP Module1 BMW CAS1-CAS4+BDM01 Adapter…

江苏网站集约化建设frontpage怎么改网站名字

教你快速上手AI应用——吴恩达AI系列教程 人工智能风靡全球,它的应用已经渗透到我们生活的方方面面,从自动驾驶到智能家居,再到医疗辅助和量化交易等等。他们逐渐改变了我们的生活方式,然而,对于许多人来说,AI仍然是一个神秘且无法理解的领域。 为了帮助更多的人理解并掌握AI…

北京网站案例站长统计app软件

前言 Perfectly Clear WorkBench 是一款图像修复工具&#xff0c;可以帮助用户对自己的图片素材进行修复&#xff0c;很多的照片因为拍摄问题&#xff0c;或者设备限制&#xff0c;会导致拍摄效果不好&#xff0c;使用这款软件可以进行一定程度的修复&#xff0c;当拍摄时亮度…

spatial项目的主要领导者斯坦福大学ppl实验室的 Kunle Olukotun 教授和 Christos Kozyrakis 教授

Kunle Olukotun 教授是一位出身于印度的计算机科学家,他的知名成就是开创了多核处理器的先河。标签是 Sun 公司的 Niagara 系列多核处理器,当时大家都还在单核上混。Olukotun团队的解决方案:他们提出了 芯片多处理器…

程序杂谈:概述

程序语言是一切计算机程序的载体,可谓是计算机技术的核心。 这个世界上有各种各样的程序语言,本合集将介绍尽可能多的、著名的程序设计语言。了解更多的程序语言(以及背后的哲学、生态)有助于技术选型。选择正确的…

字符串基础

字符串Hash我们定义一个把字符串映射到整数的函数 \(f\) ,这个 \(f\) 称为是 \(Hash\) 数。 我们希望这个函数 \(f\) 可以方便地帮我们判断两个字符串是否相等。基础公式: $f(s)= {\textstyle \sum_{i=1}^{l}} s[i]…

免费微网站建设网站关键字字数

王江民&#xff0c;中国最早的反病毒专家&#xff0c;被业界尊称“中国杀毒软件之父”、“中国反病毒第一人。以38岁为分界&#xff0c;王江民的前半生&#xff0c;是中国青年身残志坚的楷模&#xff0c;他的后半生是中国安全软件的奠基人&#xff0c;带领中国商用软件第一个走…

营销型网站建设有哪些官方网站建设必要性

题干&#xff1a; 分东西 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB 难度&#xff1a;1 输入 第一行输出一个数i表示有i组情况&#xff08;0<i<10&#xff09; 接下来的i行&#xff0c;每一行输入两个个数M(0<M<1000000)和N(0<N<2…

Kubernetes 进阶实战:CRD、Gateway API 与优先级调度 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

初识MYSQL —— 数据库基础 - 指南

初识MYSQL —— 数据库基础 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

多态下,构造函数和析构函数的顺序,以及父类、子类的转换

1 #include <iostream>2 #include <cstdio>3 #include <cstdlib>4 #include <cstring>5 using namespace std;6 7 #define ll long long8 9 const int maxn=1e5+10;10 11 class A {12 public:…

US$49 B48 amp; MSV90 ISN Reading via OBD Authorization for Yanhua Mini ACDP

Software License for YANHUA ACDP B48 Integrated Interface BoardWhen you buy Yanhua DME B48 Integrated Interface Board (SK247-F3), you will need to purchase this software license as well.No need shippin…

泰安微网站建设凡客诚品线下店

From: http://blog.csdn.net/wangfeng2500/article/details/7650062 在TCP层&#xff0c;有个FLAGS字段&#xff0c;这个字段有以下几个标识&#xff1a;SYN, FIN, ACK, PSH, RST, URG. 其中&#xff0c;对于我们日常的分析有用的就是前面的五个字段。 它们的含义是&#x…

在CodeBolcks下wxSmith的C++编程教程——使用 wxGrid

0.前言 欢迎来到 wxSmith 教程页面!wxSmith 与 Code::Blocks、wxWidgets 和 C++ 编译器相结合,为您提供一种所见即所得的方式来创建具有图形用户界面 (GUI) 的应用程序。该组合形成了一个用于快速应用程序开发 (R…

题解:P12479 [集训队互测 2024] 长野原龙势流星群

题目: 唉不是,这个 trick 我见过啊 QAQ! 我们想一下特殊点,发现最大的点肯定选自己,然后又会发现他的父亲也必选他,所以每次找最大的点和他父亲合并成新点即可。 合并了贪心选点的过程。 #include<bits/stdc+…

详细介绍:Docker(一)—— Docker入门到精通:从基础概念到容器管理

详细介绍:Docker(一)—— Docker入门到精通:从基础概念到容器管理2025-09-27 11:55 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

linux下nginx

sudo apt install nginx sudo systemctl start nginx # 设置开机自启 sudo systemctl enable nginx配置文件 MacOS (Homebrew 安装): /usr/local/etc/nginx/nginx.conf Linux: /etc/nginx/nginx.conf Debian/Ubuntu 系…

青岛网站制作辰星辰凤岗本地网站

隐藏方法&#xff1a;1、打开apache的http.conf配置文件&#xff0c;开启mod_rewrite.so模块&#xff1b;2、AllowOverride None项中将None改为All&#xff1b;3、修改“.htaccess”的配置内容&#xff0c;将原代码替换为官方手册提供的代码。thinkphp现在的php主流框架之一&am…