Codeforces 913 二进制背包(柠檬水) 暴力贪心特殊背包(选题)
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) 保证了价格的最优化
然后从0开始到30 如果二进制有当前体积的就买 同时检验一下anser=min(anser,cost[i+1])(意思是如果买当前所有体积两倍的水比买当前的便宜就买当前体积两倍的)
#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 Code
D
给你N个问题 T时间 每个问题有一个ai和ti 分别的意思是 总解决的问题如果不大于ai这个问题就有一个贡献与问题所消耗的时间
要求你求出最大的贡献值
可以二分也可以直接优先队列贪心 把ai ti i的问题 push进 pro[ai] make_pair(ti,i)
假设当前最大值是i 从N开始 把pro[i]的全部压入优先队列 如果问题数比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
转载于:https://www.cnblogs.com/Aragaki/p/8711214.html
Codeforces 913 二进制背包(柠檬水) 暴力贪心特殊背包(选题)相关推荐
- LeetCode 860. 柠檬水找零(贪心)
1. 题目 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美 ...
- LeetCode每日一题--860. 柠檬水找零(贪心)
题目:跳转至 860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元 ...
- 贪心相关:柠檬水找零、买卖股票的最佳时机、分发饼干、跳跃游戏 ...
文章目录 一.柠檬水找零 二.买卖股票的最佳时机 三.买卖股票的最佳时机II 四.分发饼干 五.模拟行走机器人(困难) 六.跳跃游戏 七.跳跃游戏II(困难) 一.柠檬水找零 注意:是按顺序收取,不是 ...
- 笔记1 第11课 贪心初步 ——柠檬水找零,分发饼干,跳跃游戏,完成所有任务所需最小能量——极客时间算法
之前收藏了极客时间的算法训练营3期 共21课,计划每一课写博客来记录学习,主要形式为 方法类型1 题1 题解 题2 题解 方法类型2 题1 题解 -- 题目大体来自leetcode 和 acwing ...
- Suzy想吃烤蛋挞了Day35 | 贪心算法进行时:860. 柠檬水找零,406. 根据身高重建队列,452. 用最少数量的箭引爆气球
860. 柠檬水找零 solution 不要漏掉的一种情况是:如果收到了20,可以找10+5,或者5+5+5 class Solution:def lemonadeChange(self, bills ...
- 柠檬水找零---贪心算法(c++)实现
来源:力扣 链接:https://leetcode.cn/problems/lemonade-change/ 题目详情: 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 ...
- 贪心算法之柠檬水java
贪心算法的基本思想: 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解.用局部解构造全局解,即从问题的某一个初始解逐 ...
- LeetCode[860] 柠檬水找零 (贪心)
PS: 本题目摘自 LeetCode 860 原题 柠檬水找零,一道贪心算法问题 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次 ...
- 代码随想录35——贪心:860柠檬水找零、406根据身高重建队列、452用最少数量的箭引爆气球
文章目录 1.860柠檬水找零 1.1.题目 1.2.解答 2.406根据身高重建队列 2.1.题目 2.2.解答 3.452用最少数量的箭引爆气球 3.1.题目 3.2.解答 1.860柠檬水找零 ...
最新文章
- 和12岁小同志搞创客开发:检测按键状态的两件法宝
- 【Linux】Linux简单操作之压缩解压
- J. Cheminform. | GraphSol:预测接触图助力蛋白质溶解度预测
- jetpack 安装
- Hibernate 一级缓存,二级缓存,查询缓存
- ecshop程序设置伪静态简单三步骤
- linux的驱动开发——设备号
- php开发api数据加密,php-app开发接口加密
- Myeclipse 操作数据库
- 今天可免费用VR观看第51届超级碗大赛直播
- 摘录一些介绍Linux DKMS的博客文章
- window media player 内部应用程序出错
- 经典推荐:盛大架构师周爱民回顾职业历程,分享十项建议
- 语音情绪识别.PDF
- 图片标签格式的转换:TXT转为XML,PNG转为JPG格式
- 转移APK从手机到PC和PC到手机
- 名帖128 成亲王 楷书《心经》册
- Dedecms QQ一键登录插件
- 【Docker】(五)使用bind mounts修改Docker容器中的Nginx配置文件
- error C2338: /RTCc rejects conformant code错误解决