首页 > 石子合并
头像 11D_Beyonder
发表于 2020-06-10 11:07:02
分析 由于石子摆在圆形操场的四周,因此 堆石子会摆放成一个环,于是不妨将 堆石子复制一份,使得 。定义 为合并区间 内石子获得的最小得分,有状态转移方程 。同理,定义 为合并区间 内石子获得的最大得分,有状态转移方程 。所求即为 和 。 代码 #include<algorit 展开全文
头像 在刷题的单身狗很开心
发表于 2023-10-12 22:12:01
本题针对于区间进行操作,是一个区间dp的问题。对于某个区间i,j能够得到的最大值等于在区间里面分成两部分中所有两部分的最大值。那么再看分出来的这两部分其实又可以划分两部分。 那么动态规划的状态转移方程就出来了:dp[i][j] = max(dp[i][j], dp[i][k]+dp[k+1][ 展开全文
头像 牛客947274517号
发表于 2020-06-19 19:54:48
题目描述 链接:https://ac.nowcoder.com/acm/problem/50493来源:牛客网 将n堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数n及每堆的石子数,并进行如下计 展开全文
头像 威风镰鼬
发表于 2021-10-08 13:26:01
思路 解决是个圈的问题,直接复制一遍数组,然后跑区间DP就好了。 区间DP是先枚举长度,再枚举起点,然后在起点和终点之间枚举中间点,表示合并的两个区间。 代码 #include<bits/stdc++.h> using namespace std; int main(){ int n 展开全文
头像 Z_L_G
发表于 2025-05-04 15:49:42
题意 给定n堆石子,成环放置,每堆石子有自己的重量,每次合并可以合并相邻的两堆,合并的得分是两堆石子重量和,求解把所有石子合并成一堆所得的最大得分和最小得分 思路 由于两堆石子是相邻的,所以每一次合成其实是对一个区间中的两堆的分界做考虑,下面按求最大得分考虑,如一共1~5,合并1~5的最后一次 展开全文
头像 默默然诶
发表于 2022-07-30 11:00:22
#include<bits/stdc++.h> using namespace std; const int N=410; int dpmin[N][N]; int dpmax[N][N]; int a[N]; int n; int sum[N]; int main() { 展开全文
头像 灰小呆
发表于 2023-07-27 15:09:50
因为石子摆在圆形操场的四周,是一个环,我们可以利用a[i+n]=a[i],把环拆成链。n堆石子中挑选任意区间。f[l][r]表示从l到r合并成一堆的最小代价。 先把[l,r]切分为两部分,[l,k]和[k+1,r],k是切分点。再把两部分合并在一起消耗的代价就是从[l,r]所有的质量之和。用前缀和求 展开全文
头像 全村最菜的雨林林
发表于 2021-02-17 12:16:50
链接:https://ac.nowcoder.com/acm/problem/50493来源:牛客网 将n堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数n及每堆的石子数,并进行如下计算:选择一 展开全文

等你来战

查看全部