博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #437 C. Ordering Pizza
阅读量:6948 次
发布时间:2019-06-27

本文共 1405 字,大约阅读时间需要 4 分钟。

题意: n个人吃披萨,总共有两种披萨,每种披萨都是有S块,给出每个人要吃的块数,吃第一种披萨能获得的happy值,吃第二种披萨能获得的happy值,问你,在购买的披萨数最少的情况下能获得的最大的总的happy值是多少(披萨可以买任意多个,吃不完也行 2333333)

Examples
Input
3 12 3 5 7 4 6 7 5 9 5
Output
84
Input
6 10 7 4 7 5 8 8 12 5 8 6 11 6 3 3 7 5 9 6
Output
314 思路:首先肯定是每个人都吃happy值更大的那一种披萨最优,但是有一个问题,可能会多出一点零头,那么我们记为sum1和sum2。    如果sum1+sum2>S,那么这些零头肯定是要买两个披萨的,不如就各买各的,那么答案就是ans;    但是如果sum1+sum2<=S,那么就要一起买一个披萨了,这样的话就用ans-min(让买第一种披萨的去买第二种的差值,    让买第二种披萨的去买第一种的差值),     这样算出来的结果就是答案了。    (用结构体保存一下a,b,差值,然后按差值从小到大来排序,肯定是让差值小的最后买这样才最划算,因为如果要买另外一     个这样损失最小)    for(int i=0;i
#include
#include
using namespace std; const int maxn=1e5+5; struct node{
    long long s,a,b,c; }t1[maxn],t2[maxn]; bool cmp(node x,node y){
    return x.c
>n>>S;     for(int i=0;i
>x>>y>>z;         if(y>z){
            t1[n1].s=x;             t1[n1].a=y;             t1[n1].b=z;             t1[n1].c=y-z;             ans+=t1[n1].a*t1[n1].s;             sum1=(sum1+t1[n1].s)%S;             n1++;         }         else {
            t2[n2].s=x;             t2[n2].a=y;             t2[n2].b=z;             t2[n2].c=z-y;             ans+=t2[n2].b*t2[n2].s;             sum2=(sum2+t2[n2].s)%S;             n2++;         }     }     if(sum1+sum2>S){
        cout<
<

转载于:https://www.cnblogs.com/ljy08163268/p/7634312.html

你可能感兴趣的文章
Todolist组件
查看>>
java自定义注解
查看>>
选择排序
查看>>
【下一代核心技术DevOps】:(六)Rancher集中存储及相关应用
查看>>
关于AFNetWorking3.0内存泄漏的问题
查看>>
出差感想
查看>>
简单的一个布局CSS+DIV
查看>>
面试时要懂得说的黄金五条
查看>>
字王4K云字库入驻github
查看>>
UVa10561 Treblecross
查看>>
windbg 调试提示sos与clr不匹配问题
查看>>
剑指offer:数据流中的中位数
查看>>
JS调用命令实现F11全屏
查看>>
a标签href无值,点击刷新页面解决办法
查看>>
Arm开发板+Qt学习之路
查看>>
unknown local index 'index_name' in search request
查看>>
看视频学编程之C#中的类
查看>>
C# DataGridView控件绑定数据后清空数据
查看>>
C++基础知识(一)
查看>>
高抬贵手,拉耳复阳
查看>>