可乐【简单期望】
题意
有 \(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;
}