1. 简单贪心

    所谓简单贪心,就是每步都取最优的一种方法。

月饼问题:有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组内最小数的更多相关文章

  1. 【算法笔记】B1040 有几个PAT

    1040 有几个PAT (25 分) 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T):第二个 PAT 是第 3 位(P),第 ...

  2. 算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)

     目录 1 算年龄 2 猜算式 3 排列序数 4 字符串比较 5 还款计算 6 滑动解锁 7 风险度量   PS:以下代码部分仅供参考,若有不当之处,还请路过同学指出哦~ 1 算年龄 标题:算年龄 英 ...

  3. 【算法笔记】B1023 组个最小数

    1023 组个最小数 (20 分) 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 ...

  4. PAT (Basic Level) Practice 1023 组个最小数

    个人练习 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的 ...

  5. PAT B1020 月饼(25)

    题目描述 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部 ...

  6. PAT B1023 组个最小数(20)

    题目描述 给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的 ...

  7. PAT B1020 月饼

    #include<iostream> #include<algorithm> using namespace std; struct mooncake { double sto ...

  8. PAT (Basic Level) Practice 1023 组个最小数 分数 20

    给定数字 0-9 各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就 ...

  9. 月饼问题PAT B1020(贪心算法)

    月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部分库存.样 ...

随机推荐

  1. RabbitMQ (五):死信队列

    什么是TTL RabbitMQ的TTL全称为Time-To-Live,表示的是消息的有效期.消息如果在队列中一直没有被消费并且存在时间超过了TTL,消息就会变成了"死信" (Dea ...

  2. laravel DB 类库

    DB 类操作数据库    基本用法: DB::table('tableName'); 获取操作tableName 表        增加信息        对数据库中的某个表增加数据主要有两个函数可以 ...

  3. 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现

    /*  现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息    对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...

  4. Redis集群与高可用

    Redis集群 redis cluster 是redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了redis分布式的需求,当一个redis节点挂了可以快速的切换到另一个节点.当遇到单 ...

  5. linux安装python3.6.1

    Linux下安装Python3.6和第三方库   如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!! ...

  6. python实现直方图的应用

    目录: (一)调节图片对比度(均衡化) (1)全局直方图均衡化------equalizeHist (2)自适应的局部的直方图均衡化------createCLAHE (二)图片的相似度比较 (三)直 ...

  7. [hdu7044]Fall with Fake Problem

    二分$T$​​​​​​​​和$S$​​​​​​​​第一个不同的位置,即需要对于$s$​​​​​​​​,判定是否存在$T[1,s]=S[1,s]$​​​​​​​​且满足条件的$T$​​​​ (注:这里的 ...

  8. c语言if语句是如何变成汇编代码的?

    1. 要编译的测试代码: int a; int b = 3; int main(void) { if (3) a = 4; else b = 5; } 2. 词法分析 词法分析将c源代码解析成一个个的 ...

  9. radio两行每行只能选择一个的解决方案!

    如图,我要做到这个效果,竖着每行只能有一个最像,和最不像,点击左边禁用右边 <div v-else> <div v-if="progress<quiz.length& ...

  10. jmeter ssh command方式执行hive指令

    Hive命令执行 打开任意一个安装了hive的服务器,进入hive bin 路径,可以看到存在以下文件(仅展示部分): -rwxr-xr-x 1 root root 1297 Jun 28 14:29 ...