括号序列的dp问题模型
括号序列的dp问题模型
Codeforces314E
◦给定一个长度为n的仅包含左括号和问号的字符串,将问号变成左括号或
右括号使得该括号序列合法,求方案总数。
◦例如(())与()()都是合法的括号序列。
◦ n<=3000。
在括号序列问题中,总是把左括号看作+1,右括号看作-1,要使括号序列合法,只需满足任意一个前缀和大于
或等于0,且总和为0即可
设dp[i][j]表示第i个字符,还剩下j个左括号的方案数
若第i+1个字符是左括号,则dp[i+1][j+1]+=dp[i][j]
若第i+1个字符是右括号,则dp[i+1][j-1]+=dp[i][j]
若第i+1个字符是问号,则dp[i+1][j+1]+=dp[i][j],dp[i+1][j-1]+=dp[i][j]
答案为:dp[n][0]
BZOJ3709
◦在一款电脑游戏中,你需要打败n只怪物(从1到n编号)。为了打败第i只
怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点
生命值。任何时候你的生命值都不能降到0(或0以下)。
◦请问是否存在一种打怪顺序,使得你可以打完这n只怪物而不死掉。
◦N<=10^5
巧妙的贪心题目(之所以引入这道贪心,是因为这道题的解题思路对下一题有帮助)
引入zhhx的一句话:
贪心:noip的贪心很多都是按照某种方式排序,然后依次选或处理。
显然,当a[i]>d[i]时,打第i只怪物会回血,所以先打能回血的怪物
在能回血的怪物里,我们需要先打d[i]小的怪物,故按照d[i]从小到大排序
那么对于不能回血的怪物,我们该怎样排序呢?
首先,如果我们最后能活下来,那么剩余的生命值一定是固定的,所以反着来考虑,和正着是一样的
反着来想我们需要先打a[i]小的怪物,正着来想就是按照a[i]从大到小排序
因此我们把这些怪物分成两组,a[i]-d[i]>0的为一组,a[i]-d[i]<0的为一组
再分别按照d[i]从小到大,a[i]从大到小进行排序
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define Maxn 100100
#define ll long long
int n;
ll z;
struct node{
int dec,inc,num;
}a[Maxn],b[Maxn];
bool cmp1(node x,node y)
{
return x.dec<y.dec;
}
bool cmp2(node x,node y)
{
return x.inc>y.inc;
}
int ans[Maxn];
int tot1=0,tot2=0;
int main()
{
scanf("%d%lld",&n,&z);
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(y-x>=0)//
{
a[++tot1].dec=x;a[tot1].inc=y;a[tot1].num=i;
}
else
{
b[++tot2].dec=x;b[tot2].inc=y;b[tot2].num=i;
}
}
sort(a+1,a+tot1+1,cmp1);
sort(b+1,b+tot2+1,cmp2);
for(int i=1;i<=tot1;i++)
{
z-=a[i].dec;
if(z<=0){printf("NIE");return 0;}
z+=a[i].inc;
}
for(int i=1;i<=tot2;i++)
{
z-=b[i].dec;
if(z<=0){printf("NIE");return 0;}
z+=b[i].inc;
}
printf("TAK\n");
for(int i=1;i<=tot1;i++)printf("%d ",a[i].num);
for(int i=1;i<=tot2;i++)printf("%d ",b[i].num);
return 0;
}
括号序列的dp问题模型的更多相关文章
- 合法括号序列(dp+组合数学)
键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字符串恰好一个合法的括号序列. 每按一次左括号(,字符串末尾追加一个左括号( 每按一次右括号),字符串末尾追加一个右括号 ...
- 九度OJ 1337:寻找最长合法括号序列 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:839 解决:179 题目描述: 给你一个长度为N的,由'('和')'组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的 ...
- TZOJ 3295 括号序列(区间DP)
描述 给定一串字符串,只由 “[”.“]” .“(”.“)”四个字符构成.现在让你尽量少的添加括号,得到一个规则的序列. 例如:“()”.“[]”.“(())”.“([])”.“()[]”.“()[( ...
- 【区间DP】codevs3657 括号序列题解
题目描述 Description 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合法的,那么AB ...
- 括号序列模型--序列dp--U86873 小Y的精灵国机房之旅
括号序列模型及解法 >Codeforces314E◦给定一个长度为n的仅包含左右括号和问号的字符串,将问号变成左括号或右括号使得该括号序列合法,求方案总数.◦例如(())与()()都是合法的括号 ...
- [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)
[BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...
- Neko and Aki's Prank CodeForces - 1152D (括号序列,dp)
大意: 将所有长度为2*n的合法括号序列建成一颗trie树, 求trie树上选出一个最大不相交的边集, 输出边集大小. 最大边集数一定不超过奇数层结点数. 这个上界可以通过从底层贪心达到, 所以就转化 ...
- BZOJ4350: 括号序列再战猪猪侠【区间DP】
Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号序列S合法,当且仅当: 1.( )是一个合法的括号序列. 2.若A是合法的括号序列, ...
- 括号序列(区间dp)
括号序列(区间dp) 输入一个长度不超过100的,由"(",")","[",")"组成的序列,请添加尽量少的括号,得到一 ...
随机推荐
- 手动部署k8s-prometheus
简介 Prometheus 最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于2016年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目. ...
- nginx核心模块常用指令
默认启动Nginx时,使用的配置文件是: 安装路径/conf/nginx.conf 文件,可以在启动nginx的时候,通过-c来指定要读取的配置文件 常见的配置文件有如下几个: nginx.conf: ...
- 优化方法总结以及Adam存在的问题(SGD, Momentum, AdaDelta, Adam, AdamW,LazyAdam)
优化方法总结以及Adam存在的问题(SGD, Momentum, AdaDelta, Adam, AdamW,LazyAdam) 2019年05月29日 01:07:50 糖葫芦君 阅读数 455更多 ...
- 怎样获取当前文档所有的元素节点(即html标签节点)
方法1. 使用 document.getElementsByTagName("*"); 方法2. 使用document.querySelectorAll("*" ...
- hdu 1281 匈牙利算法
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 安装 node.js npm,cnpm
参考:https://blog.csdn.net/suiyuehuimou/article/details/74143436 https://www.liaoxuefeng.com/wiki/0014 ...
- c# internal关键字
对于一些大型的项目,通常由很多个DLL文件组成,引用了这些DLL,就能访问DLL里面的类和类里面的方法.比如,你写了一个记录日志的DLL,任何项目只要引用此DLL就能实现记录日志的功能,这个DLL文件 ...
- [转载]clip gradient抑制梯度爆炸
[转载]clip gradient抑制梯度爆炸 来源:https://blog.csdn.net/u010814042/article/details/76154391 1.梯度爆炸的影响 在一个只有 ...
- hive面试题(免费拿走不谢)
Hive 最常见的几个面试题 1.hive 的使用, 内外部表的区别,分区作用, UDF 和 Hive 优化(1)hive 使用:仓库.工具(2)hive 内部表:加载数据到 hive 所在的 hdf ...
- js模糊查询案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...