ZOJ 3632 ----dp+优先队列

上个礼拜学长讲了优先队列的说....

emmmmmm....

看着题解敲了一题...先m下。

#include<cstring>  
#include<algorithm>  
#include<iostream>  
#include<cmath>  
#include<cstdio>  
#include<queue> 
using namespace std;
struct gua
{
	long long v,d;
	bool operator < (const gua &b)const
	{
		if(v==b.v) return d>b.d;
		return v>b.v;
	}
};//这里手残漏了个分号导致螺旋报错
priority_queue<gua>que;
int main()
{
	int a[50005],b[50005],n,i;
	long long p[50005]={0};//p[i]表示在前i天有西瓜吃的情况下(并非于i天截止)最小花费
	while(cin>>n)
	{
		for(i=1;i<=n;i++) cin>>a[i];
		for(i=1;i<=n;i++) cin>>b[i];
		while(que.size()) que.pop();//初始化队列
		gua t;
		for(i=1;i<=n;i++)
		{
			t.v=p[i-1]+a[i];
			t.d=i+b[i]-1;
			while(que.size()&&que.top().d<i) que.pop();//判断,当当前最优解的天数打不到i时弹出
			que.push(t);
			p[i]=que.top().v;
		}
		cout<<p[n]<<endl;
	}
}

  rua~

原文地址:https://www.cnblogs.com/wsblm/p/7263191.html