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~

上一篇:Mybatis框架基础支持层——反射工具箱之泛型解析工具TypeParameterResolver(4)


下一篇:AOP统一处理Web请求日志