青藤 贪心法 1
文章平均质量分 79
巧妙贪心
3sFener
鸽子
展开
-
青藤 #136 合并果子
题目大意给出n个数,每次将两个数合起来,消耗两个数的和的体力,输出最少的体力。思路用 priority_queue 即可。因为要使体力最小,所以要从小到大排。但 priority_queue 是从大到小……用负数!#include <bits/stdc++.h>using namespace std;int n;priority_queue<int> m;int main() { long long n, ans = 0; int t; c原创 2020-12-13 22:45:46 · 131 阅读 · 0 评论 -
青藤 #10113 乘积最大 2
题目大意要求将n写成若干个正整数之和,并且使这些正整数的乘积最大,保留小数点前一百位。思路可以先分类讨论。2 → 1×13 → 1×24 → 2×25 → 2×36 → 3×3这时发现拆成三的方法最优,也可以证明:拆成2:(n−2)×2=2n−4(n-2)×2=2n-4(n−2)×2=2n−4拆成3:(n−3)×3=3n−9(n-3)×3=3n-9(n−3)×3=3n−9相差:∵3n−9−(2n−4)=n−5\because 3n-9-(2n-4)=n-5∵3n−9−(2n−4)=n原创 2020-12-13 22:31:11 · 16721 阅读 · 0 评论 -
青藤 #10043 美元汇率
题目大意给你每一天美元与马克的汇率,求出最多可得到的美元。思路分两条路,从前一天得到今天最多可得的马克与美元,最后换算成美元输出。#include <bits/stdc++.h>using namespace std;long double d = 100, m;double n, day[100001];int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >&原创 2020-12-13 21:58:08 · 153 阅读 · 0 评论 -
青藤 #10021 均分纸牌
题目描述有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1的堆上;其他堆上取的纸 牌,可以移到相邻左边或右边的堆上。 现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。 例如N=4,4 堆纸牌数分别为:① 9 ② 8 ③ 17 ④ 6 移动3次可达到目的: 从 ③ 取 4 张原创 2020-11-27 19:38:28 · 228 阅读 · 0 评论 -
青藤 #10038 最大整数
题目描述设有 n 个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。 例如:n=3 时,3 个整数 13,312,343 联接成的最大整数为:34331213 又如:n=4 时,4 个整数 7,13,4,246 联接成的最大整数为:7424613输入格式n 个数输出格式联接成的多位数进行排序,只要相邻两个数的解法达到最优即可。#include <bits/stdc++.h>using namespace std;string m[21];bool c原创 2020-11-27 19:21:31 · 123 阅读 · 0 评论 -
青藤 #10081 活动选择
题目描述学校在最近几天有n个活动,这些活动都需要使用学校的大礼堂,在同一时间,礼堂只能被一个活动使用。由于有些活动时间上有冲突,学校办公室人员只好让一些活动放弃使用礼堂而使用其他教室。 现在给出n个活动使用礼堂的起始时间bi和结束时间ei(bi < ei<=32767),请你帮助办公室人员安排一些活动来使用礼堂,要求安排的活动尽量多。输入格式第一行一个整数n(n<=1000); 接下来的n行,每行两个整数,第一个bi,第二个是ei(bi < ei<=32767原创 2020-11-27 19:18:26 · 916 阅读 · 0 评论 -
青藤 #10080 删数问题
题目描述键盘输入一个高精度的正整数n(n<1024010^{240}10240),去掉其中任意s个数字后剩下的数字按照原来的次序将组成一个新的非负整数。编程对给定的n和s,寻求一种方案,使得剩下组成的新数最小。输入格式第1行:一个正整数n;第2行:s(s<n的位数).输出格式最后剩下的最小数。为了达到最优,把n先删成一个上升序列,再从后往前删。#include <bits/stdc++.h>using namespace std;int main()原创 2020-11-27 19:11:20 · 112 阅读 · 0 评论 -
青藤 #10036 排队接水
题目描述有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序, 使得n个人的平均等待时间最小。 n<=1000,等待的时间小于等于1000输入格式输入文件共两行,第一行为n;第二行分别表示第 1 个人到第n个人每人的接水时间T1,T2,…,Tn,每 个数据之间有 1 个空格。输出格式输出有一行,最少平均排列方案下的平均等待时间 ( 输出结果精确到小数点后两位 ) 。因为第一个接水的人要被算n次,所以第一个耗时最少,接着是T2,T3…#i原创 2020-11-27 19:02:02 · 174 阅读 · 0 评论 -
青藤 #10082 整数区间
题目描述给n个区间,形式为[a, b],a和b均为整数,且a < b。求一个最小的整数点的集合,使得每个区间至少 1个元素属于这个集合。求这个集合的元素个数。输入格式第1行:1个整数n(1 <= n <= 10000)接下来n行,每行2个整数,表示区间的左右端点a, b(0 <=a < b <=10000)输出格式第1行:1个整数,表示集合的元素的个数思路:按右端点排,并区间,以右端点做元素。struct interval保存区间左原创 2020-11-22 13:48:18 · 253 阅读 · 0 评论 -
青藤 #10040 纪念品组合
题目大意把n个数分成几组,每组的总和不超过w,求最少可分多少组。思路先把数进行排序,再用大数配对小数。value目前组的总价值g最少组数#include <bits/stdc++.h>using namespace std;int souv[100001];int main() { int Max, n; cin >> Max >> n; for (int i = 1; i <= n; i++) cin >&g原创 2020-11-22 13:25:27 · 667 阅读 · 0 评论