啊~离noip还有1天……我的题还没刷完呢……我的模板用的还是不熟练……怎么办怎么办……
先入正题吧……
1052 地鼠游戏
这道题是一道贪心问题……我们可以用堆(优先队列)来优化
贪心策略:当前任务能完成的必然是时间在大于等于当前时间的,然后完成当前时间能完成的较大的任务
简要做法如下:
首先没我们先按时间逆序排一遍,然后再逆序枚举时间;
对于每个时刻,我们把当前时刻所有的价值入到大根堆里,然后选取堆顶,则是最优的;
由于我们是逆序时间,所以我们放入堆中的所有元素都是当前时间所能完成的。
ps:感谢套神的思路……用c++一写,我真的醉了……第一次比珏神的短啊!!
++++++++++++++++++++++++++++++代码如下++++++++++++++++++++++++++++++++++
<span style="font-family:Comic Sans MS;font-size:18px;">#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
struct node{
int tim,w;
bool operator <(node a)const
{
return tim>a.tim;
}
}a[130];
priority_queue<int>q;
int ans,n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i].tim);
for(int i=1;i<=n;i++)scanf("%d",&a[i].w);
sort(a+1,a+n+1);
int now=a[1].tim,k=1;
while(now)
{
while(a[k].tim==now)
{
q.push(a[k].w);
k++;
}
if(!q.empty())
{
ans+=q.top();
q.pop();
}
now--;
}
cout<<ans;
return 0;
}</span>
还有1天!向上吧!少年!……加油!!!