【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(贪心算法)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...
随机推荐
- Flask WTForm disable choice field
Flask disable choice field ChoiceField = { render_kw={'disabled':''} } form.my_field.render_kw = {'d ...
- vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(下)
其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(下) 上篇 我们已经成功引入 element-ui.axios.mock.iconfont.nprogress,本篇继续 ...
- 在Jenkins中执行 PowerShell 命令实现高效的CD/CI部署
相比于cmd,powershell支持插件.语法扩展和自定义扩展名,是智能化部署中闪闪的新星,越来越多的开发者偏爱使用Powershell. 如何让Jenkins支持Powershell呢?本文即展开 ...
- kali 安装typora
一.安装 官网下载文件解压,并移动到 /opt 文件夹下 二.赋权 在typora目录的bin文件夹下执行命令 ./typora 会报错[7442:0707/173355.682906:FATAL:s ...
- [nowcoder5668I]Sorting the Array
令$f(n,b,m)=a[1..n]$(这里下标从1开始),考虑一些性质: 性质1.对于$\forall 1\le i\le n-m+1$,若$\exists 1\le j<i,a[j]> ...
- 手把手教你实现Android真机远程截屏
先看效果演示 接下来手把手教你实现这样的效果. minicap简介 minicap是一个可以远程获取android屏幕画面的开源库,它在低版本的Android系统上采用截屏的方式获取画面,在Andro ...
- JAVA后端方面,如何快速达到能实习的程度
概要地讲,是先广度再深度,面试开发两手抓. 首先说学习方法,因为很多初学者没继续下去,不是能力不行,而是方法不当.对比下错误和正确的方法. 1 光看视频光看资料不动手连,这样转眼就忘.正确的做 ...
- 【IDEA】颜色主题 Color Theme
颜色主题 Color Theme 2020-09-08 08:35:44 by冲冲 1.本人的颜色主题:TasteTheRainbow.jar 链接:https://pan.baidu.com/s ...
- 『学了就忘』Linux用户管理 — 52、用户组管理相关命令
目录 1.添加用户组 2.删除用户组 3.把用户添加进组或从组中删除 4.有效组(了解) 1.添加用户组 添加用户组的命令是groupadd. 命令格式如下: [root@localhost ~]# ...
- Linux—yum安装python-pip
centos下安装pip时失败: [root@wfm ~]# yum -y install pipLoaded plugins: fastestmirror, refresh-packagekit, ...