星灵王 @ 2018-03-21 22:17:53
第一次打优先DP,感觉思路没错,往大佬纠错
#include<iostream>
#include<queue>
using namespace std;
int a[200005],f[200005];
int main()
{
int n,l,r;
priority_queue<int> q1;
priority_queue<int> q2;
cin>>n>>l>>r;
for(int i=0;i<=n;i++)
cin>>a[i];
for(int i=l;i<=n+1;i++)
{
q1.push(f[i-l]);
int t=q1.top();
if(i-r-1>=l)
q2.push(f[i-r-1]);
while(!q2.empty()&&q1.top()==q2.top())
{
q1.pop();
q2.pop();
}
f[i]=q1.top()+a[i];
}
cout<<f[n+1]<<endl;
return 0;
}