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相关推荐

  1. 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 ...

  2. Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...

  3. 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 ...

  4. Codeforces Round #590 (Div. 3) F. Yet Another Substring Reverse 子集dp

    传送门 文章目录 题意: 思路: 题意: 思路: 之前做过类似的题,翻转一个字串相当于将任意两个不相交的串连在一起.再一看字符集≤20\le20≤20,那就是铁子集dpdpdp了. 定义f[i]f[i ...

  5. 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 ...

  6. Codeforces Round #599 (Div. 2) E. Sum Balance 图转换 + 子集dp + 环

    传送门 文章目录 题意: 思路: 题意: 思路: 首先我们知道如果所有数的和summodk!=0sum\bmod k!=0summodk!=0那么此时无解,否则我们设need=sum/kneed=su ...

  7. Codeforces Round #635 (Div. 1) C. Kaavi and Magic Spell 区间dp

    传送门 文章目录 题意: 思路: 题意: 给你两个串s,ts,ts,t,每次都可以从sss的开头拿一个字符放到AAA串的开头或结尾,问最终有多少种方案使得ttt是AAA的前缀,注意sss不必全部拿完. ...

  8. 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 ...

  9. 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. 思路: 注意到题目中保证了每个孩子至多收到 ...

最新文章

  1. DHCP Client 无法启动 拒绝访问
  2. linux 设置防火墙ssh,centos 8 ssh命令(服务器设置、防火墙配置等)
  3. CVPR 2019 | 基于骨架表达的单张图片三维物体重建方法
  4. Python-第一个Python程序
  5. 【竞赛算法学习】学术前沿趋势分析-论文数据统计
  6. python模拟登录webspare_全面解读python web 程序的9种部署方式
  7. FontAwesome-网站ui设计中一套非常棒的icon
  8. 索引超出矩阵维度怎么修改程序_seo怎么学?seo自己能学会吗?
  9. cogs577. 蝗灾(CDQ)
  10. 再谈重载:一个矢量类
  11. linux安装gd,linux下 安装GD
  12. ubuntu安装lxde_如何在Ubuntu上安装轻量级LXDE桌面
  13. ERROR 1366 (HY000): Incorrect string value: '\xE5\xB8\x82' for column 'address' at row 1
  14. 无线局域网中iPhone无法访问IIS
  15. Jmeter入门(一)使用Jmeter进行简单的性能测试
  16. 浅谈渗透测试人员职业发展路线
  17. tc275的flexcan的接收与发送
  18. pointwise linux ubuntu 安装 纪录
  19. C#操作word的一些基本方法(word打印,插入文件,插入图片,定位页眉页脚,去掉横线)...
  20. Ocelot的使用(负载均衡实现)

热门文章

  1. HTML lt strong gt 标签,HTML lt;legendgt; 标签
  2. liferay 如何使用javascript
  3. XSS:RPO(Relative Path Overwrite)攻击
  4. 一次“内存泄露”引发的血案
  5. 《网易编程题》分苹果
  6. 《剑指offer》调整数组顺序使奇数位于偶数前面
  7. Enumeration和Iterator的区别
  8. 关于kafka中的timestamp与offset的对应关系
  9. TensorFlow学习笔记(六)Variable变量
  10. 各大公司java面试整理对应问题博客整理