L2-003 月饼
2019-03-10 11:47:57来源:博客园 阅读 ()
题目:
思路:
一直都先挑单价大的卖,直到达到最大需求量。这可能是最简单的贪心算法了吧。
还有一个测试点没通过,不知道有什么问题,先不纠结了。。。
知识点for me:
sort排序:sort 函数在头?件 #include <algorithm> ??,主要是对?个数组进?排序( int arr[] 数组或者 vector 数组都?), vector 是容器,要? v.begin() 和 v.end() 表示头尾;? int arr[] ? arr 表示数组的?地址, arr+n 表示尾部。sort 默认是从?到?排列的,也可以指定第三个参数 cmp 函数,然后??定义?个 cmp 函数指定排序规则。sort 函数的 cmp 必须按照规定来写,即必须只是 > 或者 < ,?如: return a > b; 或者 return a < b; ?不能是 <= 或者 >=。
cmp 最好?的还是在结构体中,尤其是很多排序的题?~?如?个学?结构体 stu 有学号和成绩两个变量,要求如果成绩不同就按照成绩从?到?排列,如果成绩相同就按照学号从?到?排列,那么就可以写?个 cmp 数组实现这个看上去有点复杂的排序过程。下面的代码示例以及上面的解释摘自柳婼大佬。
1 #include <iostream> 2 using namespace std; 3 struct stu { // 定义?个结构体stu,number表示学号,score表示分数 4 int number; 5 int score; 6 } 7 bool cmp(stu a, stu b) { // cmp函数,返回值是bool,传?的参数类型应该是结构体stu类型 8 if (a.score != b.score) // 如果学?分数不同,就按照分数从?到?排列 9 return a.score > b.score; 10 else // 如果学?分数相同,就按照学号从?到?排列 11 return a.number < b.number; 12 } 13 // 有时候这种简单的if-else语句我喜欢直接??个C语???的三?运算符表示~ 14 bool cmp(stu a, stu b) { 15 return a.score != b.score ? a.score > b.score : a.number < b.number; 16 }
上代码:
#include <iostream> #include <algorithm> using namespace std; struct YB{ int sum; float ave; int pri; }yb[1000]; bool cmp(YB x,YB y){ return x.ave>y.ave; } int main(){ int n,need,sum,price; float ans=0; cin>>n>>need; for(int i=0;i<n;i++) { cin>>yb[i].sum; } for(int i=0;i<n;i++) { cin>>yb[i].pri; yb[i].ave=(float)yb[i].pri/yb[i].sum; } sort(yb,yb+n,cmp); for(int i=0;i<n;i++) { if(yb[i].sum<need) { ans+=yb[i].pri; need-=yb[i].sum; }else{ ans+=yb[i].ave*need; break; } } printf("%.2f",ans); return 0; }
下面这是最开始的代码,测试点两个没通过 不知道为嘛
#include <iostream> using namespace std; struct YB{ int sum; float ave; int pri; }yb[1005]; int main(){ int n,need,sum,price; float ans=0; cin>>n>>need; for(int i=0;i<n;i++) { cin>>yb[i].sum; } for(int i=0;i<n;i++) { cin>>yb[i].pri; yb[i].ave=(float)yb[i].pri/yb[i].sum; } while(need!=0) { float max=yb[0].ave; int maxn=0; for(int i=0;i<n;i++) { if(yb[i].ave>max) { max=yb[i].ave; maxn=i; } } if(yb[maxn].sum<need) { ans+=(float)yb[maxn].pri; need-=yb[maxn].sum; yb[maxn].ave=0.0; }else{ ans+=yb[maxn].ave*need; need=0; } } printf("%.2f",ans); return 0; }
原文链接:https://www.cnblogs.com/littleLittleTiger/p/10486259.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- P1358 扑克牌 2020-05-06
- 博弈--巴什博弈 2020-04-24
- Z 字形变换 2020-04-14
- [题记-并查集] 合根植物 - 蓝桥杯 2020-04-07
- 无法正确通过算法题目都是哪些原因造成的? 2020-04-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash