上个礼拜学长讲了优先队列的说....
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~
时间: 2024-10-08 14:25:56