A. Regular Bracket Sequence

题意:给出四种括号的数量 ((  )) ()  )( 问是否可以组成合法的序列(只能排序不能插在另外一个的中间)

思路: 条件一:一个或 n个)( 都可以组成 )()()( 这种结构 这只需要 一个((和一个))就可以合成合法的序列

   条件二: (( 和))需要相等

()本身就合法不用管

 ude<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_startl;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
using namespace std;
const int maxn=;
const int maxm=2e4+;
int main(){
int cnt1,cnt2,cnt3,cnt4;
cin>>cnt1>>cnt2>>cnt3>>cnt4;
if(cnt1==cnt4&&(cnt3&&cnt1||!cnt3)){
printf(""); }
else printf("");
return ;
}

B. Discounts

题意:给出n个数a 和m个数 q      求 选择q个数a 求他们的和-q个数中最小的那个 +剩余的数 的最小值

思路 :直接sort a  求出总和a 然后暴力  每次减去可以删除的那个数即可

 #include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
using namespace std;
const int maxn=3e5+;
typedef long long ll;
ll a[maxn],q[maxn],sum[maxn];
int main(){
int n;
scanf("%d",&n);
FOR(i,,n)scanf("%I64d",&a[i]);
sort(a+,a++n);
FOR(i,,n)sum[i]=sum[i-]+a[i];
int m;
scanf("%d",&m);
int ans=0x3f3f3f3f;
FOR(i,,m-)scanf("%I64d",&q[i]);
FOR(i,,m-){
cout<<sum[n]-sum[n-q[i]+]+sum[n-q[i]]<<endl;;
} return ;
}
C. Painting the Fence
题意:给出q个区间 问q-2个区间的最大覆盖 n,q<5000
思路:给每个区间计数例如 给出区间 l--r  则FOR(i,l,r)cnt[i]++;
然后先枚举第一个删的区间 把这个要删的区间cnt[i]--  然后统计现在还有多少个区间可以用 这个还有一个重点 统计cnt为1的点的前缀和 这样枚举第二个删的区间时只要 多少个区间能用 - 第二个区间删去能使多少个点为0就可以计算了,很巧妙
 #include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
#define F first
#define S second
#define pii pair<int ,int >
#define mkp make_pair
using namespace std;
const int maxn=+;
typedef long long ll;
pii a[maxn];
int sum[maxn],cnt[maxn];
int main(){
int n,q;
scanf("%d%d",&n,&q);
FOR(i,,q-){
scanf("%d%d",&a[i].F,&a[i].S);
FOR(j,a[i].F,a[i].S)cnt[j]++;
}
// for(int i=1;i<=n;i++)cout<<cnt[i];
int ans=;
FOR(i,,q-){ FOR(j,a[i].F,a[i].S)cnt[j]--;
int tot=;
FOR(k,,n){
tot+=(cnt[k]>);
if(cnt[k]==)sum[k]=;
else sum[k]=;
sum[k]+=sum[k-];
}
// FOR(k,1,n)cout<<sum[k];
// cout<<endl;
int tmp=;
FOR(j,,q-){ if(i==j)continue;
tmp= max(tmp,tot-(sum[a[j].S]-sum[a[j].F-]));
//if(tmp==3)cout<<i<<" "<<j<<" "<<tot<<" "<<sum[a[i].S]<<" "<<sum[a[i].F-1]<<endl;
}
FOR(j,a[i].F,a[i].S)cnt[j]++;
ans=max(tmp,ans);
}
cout<<ans<<endl;
return ;
}

F. Clear the String

题意:祖玛游戏 问最小多少次能全部消掉

思路 :区间dp[i][j] 表示 i 到j全部消掉要多少次  初始化 当s[i]==s[j]时dp[l][j]=dp[l+1][r-1]+1 不能时dp[l][r]=min(dp[l+1][r],dp[l][r-1])+1;然后在l r区间dp[l][r]=min(dp[l][r],dp[l][k]+dp[k][r]-1); 这里k取了两次 所以要减1

 #include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
#define F first
#define S second
#define pii pair<int ,int >
#define mkp make_pair
using namespace std;
const int maxn=+;
char s[maxn];
int dp[maxn][maxn]; int main(){
int n;
scanf("%d",&n);
scanf("%s",s+);
FOR(i,,n)dp[i][i]=;
FOR(len,,n){
for(int l=,r=len;r<=n;r++,l++)
{
if(s[l]==s[r])dp[l][r]=dp[l+][r-]+;
else dp[l][r]=min(dp[l+][r],dp[l][r-])+;
FOR(k,l,r){
dp[l][r]=min(dp[l][r],dp[l][k]+dp[k][r]-);
}
}
}
cout<<dp[][n]<<endl; return ;
}

Educational Codeforces Round 61 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 61 (Rated for Div. 2) D,F题解

    D. Stressful Training 题目链接:https://codeforces.com/contest/1132/problem/D 题意: 有n台电脑,每台电脑都有初始电量ai,也有一个 ...

  2. Educational Codeforces Round 61 (Rated for Div. 2) E 多重背包优化

    https://codeforces.com/contest/1132/problem/E 题意 有8种物品,重量是1~8,每种数量是\(cnt[i]\)(1e16),问容量为W(1e18)的背包最多 ...

  3. Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化

    题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打 ...

  4. Educational Codeforces Round 61 (Rated for Div. 2) E. Knapsack

    非常经典的dp题,因为1至8的最大公约数是840,任何一个数的和中840的倍数都是可以放在一起算的, 所以我只需要统计840*8的值(每个数字(1-8)的sum%840的总和),剩下都是840的倍数 ...

  5. Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)

    #include<bits/stdc++.h>using namespace std;int st[1000007];int top;int s[1000007],t[1000007];i ...

  6. Educational Codeforces Round 61 (Rated for Div. 2)F(区间DP,思维,枚举)

    #include<bits/stdc++.h>typedef long long ll;const int inf=0x3f3f3f3f;using namespace std;char ...

  7. Educational Codeforces Round 61 (Rated for Div. 2)D(二分,模拟,思维)

    #include<bits/stdc++.h>using namespace std;typedef long long ll;int n,k;ll a[200007],b[200007] ...

  8. Educational Codeforces Round 37 (Rated for Div. 2)C. Swap Adjacent Elements (思维,前缀和)

    Educational Codeforces Round 37 (Rated for Div. 2)C. Swap Adjacent Elements time limit per test 1 se ...

  9. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

随机推荐

  1. item 24: 区分右值引用和universal引用

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 古人曾说事情的真相会让你觉得很自在,但是在适当的情 ...

  2. Python-正则表达式总结版

    前言: 总是写不好正则表达式,时间长不用就有些忘记了,故此在总结一篇文章以便日后查阅. 一.常用的匹配规则总结表 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空 ...

  3. 一些leetcode算法题

    DFS算法 思想:一直往深处走,直到找到解或者走不下去为止 DFS(dep,...) // dep代表目前DFS的深度 { if (找到解或者走不下去了){ return; } 枚举下种情况,DFS( ...

  4. 初识Python-1

    1,计算机基础. 2,python历史. 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码. 3,pyth ...

  5. BZOJ1969 航线规划

    给定一个无向图,每次删除一条边,求每次有多少关键边.一条边是关键边,当且仅当从1到n的所有路径都包含这条边.所有时刻图都联通. 考虑倒着做.相当于给一棵树,每次加一条边,这样树上这条边的两个端点间的路 ...

  6. Highchartsjs使用总结及实时动态刷新图

    柱状图: $('#container').highcharts({ //突显红色柱: series: [ 523, 345, 785, 565, 843,{'color': 'red','y': 30 ...

  7. Python学习第十五篇——类继承和类实例化

    学习Python类时,我们明白了类的本质,以及所谓的面向对象编程思想强调的对事物本身的属性,我们对某一类事物进行描述——采用了很多方法,这些方法描述了类的属性(比如猫科动物的眼睛,四肢,是否哺乳类等等 ...

  8. iOS开发造轮子 | 通用占位图

    https://www.jianshu.com/p/beca3ac24031 实际运用场景: 没网时的提示view,tableView或collectionView没内容时的展示view,以及其它特殊 ...

  9. zabbix使用jmx监控tomcat

    zabbix监控Tomcat/JVM实例性能(115) – 运维生存时间http://www.ttlsa.com/zabbix/zabbix-use-jmx-monitor-tomcat/ zabbi ...

  10. Linux的LiveCd与CD、DVD版

    https://blog.csdn.net/sun_168/article/details/6744401