码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 4699

时间:2014-07-28 16:07:03      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:os   io   ar   amp   ios   har   algorithm   dp   

两个栈,光标前的元素一个栈,光标后的元素一个栈

sum[i]记录从1~i个元素之和,动态规划的状态方程是 dp[i] = max( dp[i-1], sum[i] ),dp[i]记录前i个元素的最大和值。


#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<stack>
 
using namespace std;

const int Inf = 1e9+50;
const int maxn = 1e6+50;

int sum[maxn];
int dp[maxn];
stack<int> pre;
stack<int> tail;

int main()
{
	int m, x;
	char ch[10];
	while(~scanf("%d", &m))
	{
		int cursor = 0;
		dp[0] = -Inf;
		sum[0] = 0;
		while( !pre.empty() ) pre.pop();
		while( !tail.empty() ) tail.pop();
		
		while(m --)
		{
			scanf("%s", ch);
			if( ch[0] == 'I' ){
				scanf("%d", &x);
				pre.push(x);
				cursor ++;
				sum[cursor] = sum[cursor-1] + x;
				dp[cursor] = max(dp[cursor-1], sum[cursor]);
			}
			else if( ch[0] == 'D' ){
				if(cursor == 0) continue;
				cursor --;
				pre.pop();
			}
			else if( ch[0] == 'L' ){
				if(cursor == 0) continue;
				cursor --;
				tail.push(pre.top());
				pre.pop();
			}
			else if( ch[0] == 'R' ){
				if(tail.empty()) continue;
				cursor ++;
				pre.push(tail.top());
				tail.pop();
				sum[cursor] = sum[cursor-1] + pre.top(); 
				dp[cursor] = max(dp[cursor-1], sum[cursor]);
			}
			else {
				scanf("%d", &x);
				printf("%d\n", dp[x]);
			}
		}
	}
	
	return 0;
}


hdu 4699,布布扣,bubuko.com

hdu 4699

标签:os   io   ar   amp   ios   har   algorithm   dp   

原文地址:http://blog.csdn.net/u011504498/article/details/38226527

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!