区间DP 模板 282. 石子合并

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#define rg register
using namespace std;
typedef long long ll;
int sread()
{int x=0,f=1;char c=getchar();while(c>'9'||c<'0') {if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return f*x;
}
const int maxn=40010;
int n,len;
int a[maxn],sum[maxn];
int dp[350][350];
int main()
{n=sread();for(rg int i=1;i<=n;++i){a[i]=sread();  sum[i]=sum[i-1]+a[i];}memset(dp,0x3f,sizeof(dp));for(rg int i=1;i<=n;++i)  dp[i][i]=0;for(rg int len=2;len<=n;++len){for(rg int i=1;i<=n-len+1;++i){int j=len+i-1;for(rg int k=i;k<j;++k){dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[j]-sum[i-1]);}}}cout<<dp[1][n]<<endl;return 0;
}

P3205 [HNOI2010]合唱队



算法分析

代码实现

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#define rg register
using namespace std;
typedef long long ll;
int sread()
{int x=0,f=1;char c=getchar();while(c>'9'||c<'0') {if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return f*x;
}
const int p=19650827;
const int maxn=1010;
int n;
int a[maxn];
int dp[maxn][maxn][2];
int main()
{cin>>n;for(rg int i=1;i<=n;i++)   cin>>a[i];for(rg int i=1;i<=n;i++) dp[i][i][0]=1;for(rg int len=2;len<=n;++len){for(rg int i=1;i<=n-len+1;++i){int j=len+i-1;if(a[j]>a[j-1]) //如果右端点的数大于上一个数且上一个数插入在了右端点dp[i][j][1] += dp[i][j-1][1];if(a[j]>a[i])   //如果右端点的数大于左端点且上一个数插入在了左端点 dp[i][j][1] += dp[i][j-1][0];if(a[i]<a[j])  //如果左端点的数小于下一个数且上一个数插入在了右端点dp[i][j][0] += dp[i+1][j][1];if(a[i]<a[i+1])  //如果左端点的数小于右端点且上一个数插入在了左端点dp[i][j][0] += dp[i+1][j][0];dp[i][j][1]%=p;dp[i][j][0]%=p;}} cout<<(dp[1][n][0]+dp[1][n][1])%p<<endl;return 0;
}

【动态规划dp】区间DP模板 Acwing 282. 石子合并 | P3205 [HNOI2010]合唱队相关推荐

  1. AcWing.282石子合并(区间DP)题解

    石子合并 题目描述 设有N堆石子排成一排,其编号为1,2,3,-,N. 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆. 每次只能合并相邻的两堆,合并的代价为这两堆石子的质 ...

  2. 9.动态规划:区间DP问题(合并石头问题)【灵神基础精讲】

    0x3f:https://www.bilibili.com/video/BV1Gs4y1E7EU/ chenf99:由易到难,一步步说明思路和细节:https://leetcode.cn/proble ...

  3. 【区间dp】洛谷 P3205 [HNOI2010]合唱队

    P3205 [HNOI2010]合唱队 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意:有一个初始队形,这个初始队形可以是任意队形 给定一个理想队形,问你通过以下的排列方式有几 ...

  4. 算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp

    文章目录 题目分析 题目链接 题目分析 只能合并相邻两堆.求体力最小值 数据比较弱,最多300堆,每堆重量不超过1000. 状态表示 f[i][j]表示合并区间[i,j]需要的最小体力 状态转移 把区 ...

  5. 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)

    最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...

  6. 【动态规划】区间dp: P1063能量项链

    本题和合并石子果子一样,都是枚举最后一次合并的点 [动态规划笔记]区间dp:合并果子_m0_52043808的博客-CSDN博客 区别: 1.需要断环为链 2.每一堆石子变为两个值,这里用结构体实现 ...

  7. P3205 [HNOI2010]合唱队 (区间dp)

    [HNOI2010]合唱队 - 洛谷 分析: 根据题意我们发现,小a每次排队的时候,会出现两种情况 当前排入的人比初始队列中前一个人矮,排到最左边 当前排入的人比初始队列中前一个人高,排到最右边 现在 ...

  8. 洛谷 P3205 [HNOI2010]合唱队(区间dp)

     题目链接: [HNOI2010]合唱队 - 洛谷https://www.luogu.com.cn/problem/P3205  思路: 这题我是看了题解才做出来的,贴一下这位大佬的博客题解 P320 ...

  9. P3205 [HNOI2010]合唱队(区间)

    题目链接:[HNOI2010]合唱队 - 洛谷 这道题也是一道区间DP题,因为他满足大区间包含小区间,换句话说就是大区间的答案可以由小区间得到,就比如i~j的方案可以由i+1~j和i~j-1得到,所以 ...

最新文章

  1. 深层神经网络与优化算法
  2. 【 English 】程序员必备单词
  3. 2017-2018-1 20155223 实验三 实时系统
  4. Python实例讲解 -- 解析xml
  5. 【华为云技术分享】气象模拟WRF容器化操作实践
  6. [C++][基础]6_枚举和类
  7. Redis常用API-使用文档
  8. Maven 缺省内置变量
  9. Do you know? -- season 1
  10. POI多个Sheet生成Excel
  11. Jenkins 自动化部署流水线优化经验
  12. 域帐号密码快过期邮件提醒
  13. 总谐波失真--THD
  14. Android-在app内安装apk
  15. 数学-统计-距-四分位数、箱线图、方差、标准差、标准分(Z分布)
  16. 小程序没有unionid如何与App打通用户体系
  17. ctf web shell
  18. MacOS下安装及配置Maven
  19. 关于CH340驱动安装的种种问题的最终稳妥解决办法
  20. 使用nssm将命令行启动的应用程序(.exe,.bat等)注册成windows后台服务

热门文章

  1. error C2226: 语法错误 : 意外的“HFONT”类型
  2. 笔记:Interpreting CNNs via Decision Trees
  3. App inventor arduino 手机蓝牙通信实现
  4. 《后台开发核心技术与应用实践》读后感和一些思考
  5. [51nod 1463]找朋友
  6. liner中文翻译_欧路词典|英汉-汉英词典 liner是什么意思_liner的中文解释和发音_liner的翻译_liner怎么读...
  7. 中年人的焦虑:竟然是看不懂年轻人,被时代淘汰
  8. 数组使用冒泡排序法排序(Java)
  9. 2021年高压电工考试报名及高压电工新版试题
  10. oeasy教您玩转vim - 76 - # 组合键映射map