可乐【简单期望】

题意

\(k\) 种可乐,每种可乐会给小美和小团带来不同的可乐程度。现在共有 \(n\) 瓶可乐,每种可乐可以买无限瓶,小美会挑选其中的 \(m\) 瓶,而剩下的 \((n-m)\) 瓶小团喝。求出每种可乐各买多少瓶,使得小美和小团得到的快乐程度的和期望值最大。

\(1\leq n \leq 10000, 0 \leq m \leq n, 1 \leq k \leq 10,000, -10,000 \leq a, b \leq 10,000\)

题目链接:https://ac.nowcoder.com/acm/problem/16037

分析

假设第 \(i\) 瓶可乐买了 \(x_i\) 瓶,那么对于答案最后的贡献为:\(x_i(\frac{m}{n}·a_i+\frac{(n-m)}{n}·b_i)\),可以发现后面部分是确定的。因此,我们只需要求出那种可乐贡献最大,然后只买这一种可乐即可。

代码

#include <bits/stdc++.h>

using namespace std;
int main()
{
    int n,m,k,a,b;
    scanf("%d%d%d",&n,&m,&k);
    double p=1.0*m/n,maxn=-1000000.0;//由负数
    int pos=0;
    for(int i=1;i<=k;i++)
    {
        scanf("%d%d",&a,&b);
        double tp=p*a+(1.0-p)*b;
        if(tp>=maxn)
        {
            pos=i;
            maxn=tp;
        }
    }
    for(int i=1;i<=k;i++)
        printf("%d%c",i==pos?n:0,i==k?'\n':' ');
    return 0;
}

posted @ 2020-09-11 19:25  xzx9  阅读(125)  评论(0编辑  收藏  举报