Codeforces 913 二进制背包(柠檬水) 暴力贪心特殊背包(选题)
生活随笔
收集整理的這篇文章主要介紹了
Codeforces 913 二进制背包(柠檬水) 暴力贪心特殊背包(选题)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
A
B
C
給你N(N<=30)種水瓶每種水瓶有無限個 每個的體積是2^(i-1)價格是cost[i] 要求你花最少的錢弄出L體積的水
先從前到后掃一遍cost[i+1]=min(cost[i+1],cost[i]*2)? 再從后往前掃一遍cost[i]=min(cost[i],cost[i+1) 保證了價格的最優(yōu)化
然后從0開始到30 如果二進制有當(dāng)前體積的就買 同時檢驗一下anser=min(anser,cost[i+1])(意思是如果買當(dāng)前所有體積兩倍的水比買當(dāng)前的便宜就買當(dāng)前體積兩倍的)
#include <bits/stdc++.h> #include <cstdio> #include <algorithm> #include <vector> using namespace std; typedef long long ll; int n; ll L; ll cost[35]; int main() {cin >> n;cin >> L;for (int i = 1; i <= n; i++){cin >> cost[i];}for (int i = 1; i <= n - 1; i++){cost[i + 1] = min(cost[i + 1], cost[i] * 2);}for (int i = n - 1; i >= 1; i--){cost[i] = min(cost[i], cost[i + 1]);}for (int i = n + 1; i <= 33; i++){cost[i] = cost[i - 1] * 2;}ll anser = 0;for (int i = 0; i <= 30; i++){if (L & (1LL << i)){anser += cost[i + 1];}anser = min(anser, cost[i + 2]);}cout << anser << endl; } View CodeD
給你N個問題 T時間 每個問題有一個ai和ti 分別的意思是 總解決的問題如果不大于ai這個問題就有一個貢獻與問題所消耗的時間
要求你求出最大的貢獻值
可以二分也可以直接優(yōu)先隊列貪心 把ai ti i的問題 push進 pro[ai] make_pair(ti,i)
假設(shè)當(dāng)前最大值是i 從N開始 把pro[i]的全部壓入優(yōu)先隊列 如果問題數(shù)比i大就 pop掉最大的 直到遇到符合要求的或者i==0
#include <cstdio> #include <bits/stdc++.h> #include <algorithm> #include <vector> using namespace std; vector<pair<int, int> > ke[200005]; priority_queue<pair<int, int> > que; int main() {int n, T;cin >> n >> T;int where, t;for (int i = 1; i <= n; i++){scanf("%d %d", &where, &t);ke[where].push_back(make_pair(t, i));}int anser = 0;int sum = T;for (int i = n; i >= 0; i--){for (pair<int, int> ch : ke[i]){que.push(ch);sum -= ch.first;}while (que.size() > i){sum += que.top().first;que.pop();}if (que.size() == i && sum >= 0){cout << i << endl << i << endl;while (que.size()){cout << que.top().second << " ";que.pop();}cout << endl;return 0;}} } View Code?
轉(zhuǎn)載于:https://www.cnblogs.com/Aragaki/p/8711214.html
總結(jié)
以上是生活随笔為你收集整理的Codeforces 913 二进制背包(柠檬水) 暴力贪心特殊背包(选题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到桃花林盛开了好不好
- 下一篇: tab enter键出现