Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
Codeforces Round #459 (Div. 2)
C. The Monster
题意:定义正确的括号串,是能够全部匹配的左右括号串。 给出一个字符串,有 (、)、 ? 三种字符, ? 可以当作 ( 可 ) 。 问这个字符串有多少个子串是正确的括号串。
tags:好考思维,想不到。。
预处理出每个字符向左向右最多可以匹配到哪里,再 O(n*n) 枚举所有区间,看是否符合条件。
// C #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f #define MP make_pair #define PB push_back #define fi first #define se second typedef long long ll; const int N = 5005;int len, l[N], r[N]; char s[N]; int main() {scanf("%s", s+1);len = strlen(s+1);rep(i,1,len){r[i] = len+1;int cnt = 0;rep(j,i,len){if(s[j]==')') --cnt;else ++cnt;if(cnt<0) { r[i]=j; break; }}}per(i,len,1){l[i] = 0;int cnt = 0;per(j,i,1){if(s[j]=='(') --cnt;else ++cnt;if(cnt<0) { l[i]=j; break; }}}ll ans = 0;rep(i,1,len){for(int j=i+1; j<=len; j+=2){if(r[i]>j && l[j]<i) ++ans;}}printf("%lld\n", ans);return 0; }
View Code
D. MADMAX
题意:给出一个DAG图,每条边有一个字母。两个人轮流走,每一次走过的边不能小于对方上一步走过的边。求两个人分别从点 i、j 出发,先手的胜负。
tags: dp[i][j][pre] 表示先手在点 i,后手在点 j ,且上一步的边是 pre 的情况下,先手胜就为 1,后手胜就为0 。
假设点 i 有边edge 可以到 to ,那么如果有 dp[j][to][edge] = 0,则 dp[i][j][pre] = 1 。
如果没有这样的点 to,那么 dp[i][j][pre] = 0。
当然,dp 肯定要记忆化的。
// D #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b; i>=a; --i) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f #define MP make_pair #define PB push_back #define fi first #define se second typedef long long ll; const int N = 105;int n, m, G[N][N], dp[N][N][30], mx[N]; int solve(int i, int j, int pre) {if(dp[i][j][pre]!=-1) return dp[i][j][pre];if(i==j) return dp[i][j][pre]=0;if(mx[i]==-1) return dp[i][j][pre]=0;if(mx[i] > mx[j]) return dp[i][j][pre]=1;else{rep(to,1,n)if(G[i][to]!=-INF && G[i][to]>=pre){if(solve(j, to, G[i][to])==0) return dp[i][j][pre]=1;}}return dp[i][j][pre]=0; } int main() {scanf("%d%d", &n, &m);mes(dp, -1); mes(mx, -1);rep(i,1,n) rep(j,1,n) G[i][j]=-INF;int u, v; char ch;rep(i,1,m){scanf("%d%d%*c%c", &u, &v, &ch);G[u][v] = ch-'a'+1;}rep(i,1,n){int mx1=-1;rep(j,1,n) mx1=max(mx1, G[i][j]);mx[i] = mx1;}rep(i,1,n){rep(j,1,n)if(solve(i, j, 0)) putchar('A');else putchar('B');puts("");}return 0; }
View Code
转载于:https://www.cnblogs.com/sbfhy/p/8394886.html
Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp相关推荐
- Codeforces Round #331 (Div. 2) D. Wilbur and Trees 记忆化搜索
D. Wilbur and Trees Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/596/p ...
- Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心
传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...
- Codeforces Round #646 (Div. 2) E(贪心,bfs)
Codeforces Round #646 (Div. 2) E 题目大意: 给一棵树,每个节点有三个权值 A,B,C, (B,C为0或1),每次你可以花费 A[u] *k的代价让A子树中的任意 k ...
- Codeforces Round #590 (Div. 3) F. Yet Another Substring Reverse 子集dp
传送门 文章目录 题意: 思路: 题意: 思路: 之前做过类似的题,翻转一个字串相当于将任意两个不相交的串连在一起.再一看字符集≤20\le20≤20,那就是铁子集dpdpdp了. 定义f[i]f[i ...
- Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp + 输出方案
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,你需要将其分成若干组,每组的价值为max(ai)−min(ai)\max(a_i)-min(a_i)max(ai)−mi ...
- Codeforces Round #599 (Div. 2) E. Sum Balance 图转换 + 子集dp + 环
传送门 文章目录 题意: 思路: 题意: 思路: 首先我们知道如果所有数的和summodk!=0sum\bmod k!=0summodk!=0那么此时无解,否则我们设need=sum/kneed=su ...
- Codeforces Round #635 (Div. 1) C. Kaavi and Magic Spell 区间dp
传送门 文章目录 题意: 思路: 题意: 给你两个串s,ts,ts,t,每次都可以从sss的开头拿一个字符放到AAA串的开头或结尾,问最终有多少种方案使得ttt是AAA的前缀,注意sss不必全部拿完. ...
- Codeforces Round #674 (Div. 3) F. Number of Subsequences 简单计数dp
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的串,包含a,b,c,?a,b,c,?a,b,c,?四种字符,其中???可以变成为a,b,ca,b,ca,b,c的任意一种,让你求abca ...
- Codeforces Round #622 (Div. 2) D. Happy New Year 状压dp
传送门 文章目录 题意: 思路: 题意: n≤1e5,m≤1e9,k≤8.n\le 1e5,m\le 1e9,k\le 8.n≤1e5,m≤1e9,k≤8. 思路: 注意到题目中保证了每个孩子至多收到 ...
最新文章
- DHCP Client 无法启动 拒绝访问
- linux 设置防火墙ssh,centos 8 ssh命令(服务器设置、防火墙配置等)
- CVPR 2019 | 基于骨架表达的单张图片三维物体重建方法
- Python-第一个Python程序
- 【竞赛算法学习】学术前沿趋势分析-论文数据统计
- python模拟登录webspare_全面解读python web 程序的9种部署方式
- FontAwesome-网站ui设计中一套非常棒的icon
- 索引超出矩阵维度怎么修改程序_seo怎么学?seo自己能学会吗?
- cogs577. 蝗灾(CDQ)
- 再谈重载:一个矢量类
- linux安装gd,linux下 安装GD
- ubuntu安装lxde_如何在Ubuntu上安装轻量级LXDE桌面
- ERROR 1366 (HY000): Incorrect string value: '\xE5\xB8\x82' for column 'address' at row 1
- 无线局域网中iPhone无法访问IIS
- Jmeter入门(一)使用Jmeter进行简单的性能测试
- 浅谈渗透测试人员职业发展路线
- tc275的flexcan的接收与发送
- pointwise linux ubuntu 安装 纪录
- C#操作word的一些基本方法(word打印,插入文件,插入图片,定位页眉页脚,去掉横线)...
- Ocelot的使用(负载均衡实现)