本文主要是介绍Codeforces Round #450 (Div. 2) E. Maximum Questions(线段树+DP),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:http://codeforces.com/contest/900/problem/E
dp[i]表示从i开始答案最大为多少,处理出每个位置最多向后延伸多少,然后从n到1开始dp,用线段树维护最大值就好了。
代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+5;
char s[MAXN];
struct node
{int ans,cost;node(int _ans=0,int _cost=0):ans(_ans),cost(_cost){}void add(const node o){ans+=o.ans;cost+=o.cost;}bool operator < (const node &o)const{if(ans==o.ans)return cost>o.cost;return ans<o.ans;}
};
struct seg
{#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1node mx[MAXN<<2];void push_up(int rt){mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);}void update(int pos,node val,int l,int r,int rt){if
这篇关于Codeforces Round #450 (Div. 2) E. Maximum Questions(线段树+DP)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!