【C/C++】贪心/算法笔记4.4/PAT B1020月饼/PAT B1023组内最小数
- 简单贪心
所谓简单贪心,就是每步都取最优的一种方法。
月饼问题:有N种月饼,市场最大需求量D,给出每种月饼的库存量和总售价。
思路:从贵的往便宜的卖。如果当前的已经卖完了,就卖下一个。如果剩余D不足,就退出。
知识点:
对月饼单价排序后保证总数不会变:用结构体存储。
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1010;
//创建结构体
struct mooncake
{
double store; //总库存
double sell; //总售价
double price; //单价
}cake[1010];
bool cmp(mooncake a, mooncake b)
{
return a.price > b.price;
}
int main()
{
int n;
double D;
scanf("%d%lf", &n, &D);
for(int i = 0; i < n; i++)
{
scanf("%lf", &cake[i].store);
}
for (int i = 0; i < n; i++)
{
scanf("%lf", &cake[i].sell);
cake[i].price = cake[i].sell/cake[i].store;
}
sort(cake, cake + n, cmp);
double ans = 0; //计算总价
for (int i = 0; i < n; i++)
{
if (D == 0) break;
if (cake[i].store <= D) //如果库存量小于需求量
{
D -= cake[i].store; //将第i种全部卖掉
ans += cake[i].sell; //将第i种的总售价加上
}
else
{
ans += cake[i].price * D;
D = 0;
}
}
printf("%.2f\n",ans);
}
组个最小数:
#include <iostream>
using namespace std;
int main()
{
int cnt[10];
for(int i = 0; i < 10; i++)
{
scanf("%d", &cnt[i]);
}
//找到第一个不为0的最小数,输出。
for(int i = 1; i < 10; i++)
{
if (cnt[i] > 0)
{
printf("%d", i);
cnt[i]--;
break;
}
}
//从小到大输出
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < cnt[i]; j++)
{
printf("%d", i);
}
}
system("pause");
}
区间贪心
左端点从大到小排序
include
include
using namespace std;
const int maxn = 110;
struct interval
{
int x,y;
}I[maxn];
bool cmp(interval a, interval b)
{
if (a.x == b.x) return a.y < b.y;
else return a.x > b.x;
}
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d%d", &I[i].x, &I[i].y);
}
sort(I, I+n, cmp); //n组数据
int ans = 1; //记录不相交区间个数
int lastX = I[0].x; //第一个必取
for(int i = 1; i < n; i++)
{
if(I[i].y <= lastX)
{
lastX = I[i].x;
ans++;
}
}
printf("%d\n", ans);
system("pause");
}
右端点从小到大排序
include
include
using namespace std;
const int maxn = 110;
struct interval
{
int x,y;
}I[maxn];
bool cmp(interval a, interval b)
{
if (a.y == b.y) return a.x > b.x;
else return a.y < b.y;
}
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d%d", &I[i].x, &I[i].y);
}
sort(I, I+n, cmp); //n组数据
int ans = 1; //记录不相交区间个数
int lastY = I[0].y; //第一个必取
for(int i = 1; i < n; i++)
{
if (I[i].x >= lastY) ans++;
lastY = I[i].y;
}
printf("%d\n", ans);
system("pause");
}
【C/C++】贪心/算法笔记4.4/PAT B1020月饼/PAT B1023组内最小数的更多相关文章
- 【算法笔记】B1040 有几个PAT
1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 ...
- 算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)
目录 1 算年龄 2 猜算式 3 排列序数 4 字符串比较 5 还款计算 6 滑动解锁 7 风险度量 PS:以下代码部分仅供参考,若有不当之处,还请路过同学指出哦~ 1 算年龄 标题:算年龄 英 ...
- 【算法笔记】B1023 组个最小数
1023 组个最小数 (20 分) 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 ...
- PAT (Basic Level) Practice 1023 组个最小数
个人练习 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的 ...
- PAT B1020 月饼(25)
题目描述 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部 ...
- PAT B1023 组个最小数(20)
题目描述 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的 ...
- PAT B1020 月饼
#include<iostream> #include<algorithm> using namespace std; struct mooncake { double sto ...
- PAT (Basic Level) Practice 1023 组个最小数 分数 20
给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就 ...
- 月饼问题PAT B1020(贪心算法)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...
随机推荐
- RabbitMQ (五):死信队列
什么是TTL RabbitMQ的TTL全称为Time-To-Live,表示的是消息的有效期.消息如果在队列中一直没有被消费并且存在时间超过了TTL,消息就会变成了"死信" (Dea ...
- laravel DB 类库
DB 类操作数据库 基本用法: DB::table('tableName'); 获取操作tableName 表 增加信息 对数据库中的某个表增加数据主要有两个函数可以 ...
- 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现
/* 现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息 对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...
- Redis集群与高可用
Redis集群 redis cluster 是redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了redis分布式的需求,当一个redis节点挂了可以快速的切换到另一个节点.当遇到单 ...
- linux安装python3.6.1
Linux下安装Python3.6和第三方库 如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!! ...
- python实现直方图的应用
目录: (一)调节图片对比度(均衡化) (1)全局直方图均衡化------equalizeHist (2)自适应的局部的直方图均衡化------createCLAHE (二)图片的相似度比较 (三)直 ...
- [hdu7044]Fall with Fake Problem
二分$T$和$S$第一个不同的位置,即需要对于$s$,判定是否存在$T[1,s]=S[1,s]$且满足条件的$T$ (注:这里的 ...
- c语言if语句是如何变成汇编代码的?
1. 要编译的测试代码: int a; int b = 3; int main(void) { if (3) a = 4; else b = 5; } 2. 词法分析 词法分析将c源代码解析成一个个的 ...
- radio两行每行只能选择一个的解决方案!
如图,我要做到这个效果,竖着每行只能有一个最像,和最不像,点击左边禁用右边 <div v-else> <div v-if="progress<quiz.length& ...
- jmeter ssh command方式执行hive指令
Hive命令执行 打开任意一个安装了hive的服务器,进入hive bin 路径,可以看到存在以下文件(仅展示部分): -rwxr-xr-x 1 root root 1297 Jun 28 14:29 ...