题意
有 (k) 种可乐,每种可乐会给小美和小团带来不同的可乐程度。现在共有 (n) 瓶可乐,每种可乐可以买无限瓶,小美会挑选其中的 (m) 瓶,而剩下的 ((n-m)) 瓶小团喝。求出每种可乐各买多少瓶,使得小美和小团得到的快乐程度的和期望值最大。
(1leq 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?'
':' ');
return 0;
}