2 条题解
-
-1
题意
你需要消灭个敌人(编号为)
对于敌人,你如果在时刻之前消灭他,你不会耗血,否则你会消耗的血量
问最小需要多少血量
做法
反悔贪心
首先将数组按照t从小到大排序
然后一次枚举每个数,如果他大于此时时间,就直接扔到小跟堆,否则将他与堆顶比较,加上较小值,然后把那个较大的扔到堆里面
堆是使得可以免掉的血量最大
是此时时间
code
#include <bits/stdc++.h> using namespace std; const int N = 600; int n; struct node { int d, t; } arr[N]; void read() { cin >> n; for(int i = 1; i <= n; i++) cin >> arr[i].t; for(int i = 1; i <= n; i++) cin >> arr[i].d; return ; } priority_queue<int,vector<int>,greater<int> > q; void compute() { sort(arr+1,arr+1+n,[](node a,node b) { return a.t < b.t; }); int ans = 0; for(int i = 1; i <= n; i++) { if(q.size() < arr[i].t){ q.push(arr[i].d); } else{ q.push(arr[i].d); ans += q.top(); q.pop(); } } cout << ans; return ; } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); read(); compute(); return 0; }
- 1
信息
- ID
- 72
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 31
- 已通过
- 12
- 上传者