【动态规划dp】区间DP模板 Acwing 282. 石子合并 | P3205 [HNOI2010]合唱队
区间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]合唱队相关推荐
- AcWing.282石子合并(区间DP)题解
石子合并 题目描述 设有N堆石子排成一排,其编号为1,2,3,-,N. 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆. 每次只能合并相邻的两堆,合并的代价为这两堆石子的质 ...
- 9.动态规划:区间DP问题(合并石头问题)【灵神基础精讲】
0x3f:https://www.bilibili.com/video/BV1Gs4y1E7EU/ chenf99:由易到难,一步步说明思路和细节:https://leetcode.cn/proble ...
- 【区间dp】洛谷 P3205 [HNOI2010]合唱队
P3205 [HNOI2010]合唱队 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意:有一个初始队形,这个初始队形可以是任意队形 给定一个理想队形,问你通过以下的排列方式有几 ...
- 算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp
文章目录 题目分析 题目链接 题目分析 只能合并相邻两堆.求体力最小值 数据比较弱,最多300堆,每堆重量不超过1000. 状态表示 f[i][j]表示合并区间[i,j]需要的最小体力 状态转移 把区 ...
- 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)
最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...
- 【动态规划】区间dp: P1063能量项链
本题和合并石子果子一样,都是枚举最后一次合并的点 [动态规划笔记]区间dp:合并果子_m0_52043808的博客-CSDN博客 区别: 1.需要断环为链 2.每一堆石子变为两个值,这里用结构体实现 ...
- P3205 [HNOI2010]合唱队 (区间dp)
[HNOI2010]合唱队 - 洛谷 分析: 根据题意我们发现,小a每次排队的时候,会出现两种情况 当前排入的人比初始队列中前一个人矮,排到最左边 当前排入的人比初始队列中前一个人高,排到最右边 现在 ...
- 洛谷 P3205 [HNOI2010]合唱队(区间dp)
题目链接: [HNOI2010]合唱队 - 洛谷https://www.luogu.com.cn/problem/P3205 思路: 这题我是看了题解才做出来的,贴一下这位大佬的博客题解 P320 ...
- P3205 [HNOI2010]合唱队(区间)
题目链接:[HNOI2010]合唱队 - 洛谷 这道题也是一道区间DP题,因为他满足大区间包含小区间,换句话说就是大区间的答案可以由小区间得到,就比如i~j的方案可以由i+1~j和i~j-1得到,所以 ...
最新文章
- 深层神经网络与优化算法
- 【 English 】程序员必备单词
- 2017-2018-1 20155223 实验三 实时系统
- Python实例讲解 -- 解析xml
- 【华为云技术分享】气象模拟WRF容器化操作实践
- [C++][基础]6_枚举和类
- Redis常用API-使用文档
- Maven 缺省内置变量
- Do you know? -- season 1
- POI多个Sheet生成Excel
- Jenkins 自动化部署流水线优化经验
- 域帐号密码快过期邮件提醒
- 总谐波失真--THD
- Android-在app内安装apk
- 数学-统计-距-四分位数、箱线图、方差、标准差、标准分(Z分布)
- 小程序没有unionid如何与App打通用户体系
- ctf web shell
- MacOS下安装及配置Maven
- 关于CH340驱动安装的种种问题的最终稳妥解决办法
- 使用nssm将命令行启动的应用程序(.exe,.bat等)注册成windows后台服务
热门文章
- error C2226: 语法错误 : 意外的“HFONT”类型
- 笔记:Interpreting CNNs via Decision Trees
- App inventor arduino 手机蓝牙通信实现
- 《后台开发核心技术与应用实践》读后感和一些思考
- [51nod 1463]找朋友
- liner中文翻译_欧路词典|英汉-汉英词典 liner是什么意思_liner的中文解释和发音_liner的翻译_liner怎么读...
- 中年人的焦虑:竟然是看不懂年轻人,被时代淘汰
- 数组使用冒泡排序法排序(Java)
- 2021年高压电工考试报名及高压电工新版试题
- oeasy教您玩转vim - 76 - # 组合键映射map