2095 : 我只看看不写题(贪心)
you~~~
題目描述
伴隨著科技的發(fā)展,我們的生活也越來越多姿多彩,隨著手機(jī)的普及,各種交友軟件也在快速的發(fā)展。
小a是個(gè)老實(shí)人,當(dāng)然只是自己理解而已,其實(shí)小a是個(gè)不折不扣的渣男。因?yàn)樗谟信笥训耐瑫r(shí),還在瘋狂的撒網(wǎng),利用各種交友軟件尋求更適合自己的伴侶。
小a女朋友當(dāng)然不是省油的燈,自然了解小a的本性,所以在每次見面時(shí)就會(huì)翻看小a的軟件記錄,來了解小a近期的狀況,機(jī)智的小a當(dāng)然會(huì)在女朋友來之前就給完全清理干凈了。
終于在某次時(shí)間緊急的情況下,小a的軟件記錄并不一定能夠完全刪除,但是小a知道,自己每個(gè)軟件記錄的火熱程度以及最終刪除時(shí)間(即可以刪除的最晚時(shí)間,過時(shí)將無法刪除)。每個(gè)軟件記錄的刪除需要一分鐘,軟件記錄的火熱程度,正好對(duì)應(yīng)著女朋友的刺激值,小a想知道,在有限的時(shí)間內(nèi),如何才能夠讓女朋友的刺激值最小,求出最小值。
輸入
第一行一個(gè)正整數(shù)T。表示樣例個(gè)數(shù)(0 < T < 10)
每組有兩個(gè)整數(shù)n,m,分別表示一共有n個(gè)軟件以及女朋友到來的時(shí)間(0 < n <= 10^5,0 < m <= 10^6)
往下對(duì)應(yīng)著n行,每行有兩個(gè)正整數(shù)e,f分別對(duì)應(yīng)每個(gè)軟件記錄的火熱程度和該軟件的最終刪除時(shí)間。(0 < e <= 10^5,0 < f <= 10^6)
題目中涉及到的時(shí)間全部以分鐘為單位。
輸出
輸出對(duì)女朋友的最小刺激值;結(jié)果占一行。
樣例輸入
2
4 2
20 1
10 1
30 2
40 2
6 2
20 1
10 1
30 2
40 2
50 3
60 3
樣例輸出
30
100
思路
- 貪心: 時(shí)間從后往前找最大的刺激的值。
- 優(yōu)先隊(duì)列,數(shù)組模擬超時(shí)
AC
#include<bits/stdc++.h> #define ll long long #define mem(a, b) memset(a, b, sizeof(a)) #define N 100005 #define P pair<ll, int> using namespace std; struct ac{ll v, t;//優(yōu)先隊(duì)列中 刺激值降序 bool operator < (const ac &x) const{return x.v > v;} }a[N]; // 時(shí)間降序 bool cmp_t (ac x, ac y) {return x.t > y.t; } int main() { // freopen("in.txt", "r", stdin);int t;scanf("%d", &t);while (t--) {priority_queue<ac, vector<ac> >que;int n, m;//sum 總刺激值//ans 先記錄可以消除的刺激值;sum - ans int sum = 0, ans = 0;scanf("%d%d", &n, &m);for (int i = 0; i < n; i++) {scanf("%d%d", &a[i].v, &a[i].t);sum += a[i].v;}sort(a, a + n, cmp_t);int now = 0;//時(shí)間從后往前 while (m) {while (now < n && a[now].t >= m) {que.push(a[now]);now++;}//每次去隊(duì)列中的最大值 if (!que.empty()) {ans += que.top().v;que.pop();}m--;}ans = sum - ans;printf("%d\n", ans);} return 0; }總結(jié)
以上是生活随笔為你收集整理的2095 : 我只看看不写题(贪心)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2060 : Minsum Plus(贪
- 下一篇: 2049 : 压死骆驼的最后一根稻草 (