gym/101194 E. Bet(贪心,精度)
发布日期:2021-06-30 10:32:33 浏览次数:2 分类:技术文章

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

n n n个人,每个人有属性 A i , B i A_i,B_i Ai,Bi

选出一些人给第 i i i个人投钱 x i x_i xi,使得 x i ∗ ( 1 + B i A i ) > ∑ x j x_i*(1+\frac{B_i}{A_i})>\sum x_j xi(1+AiBi)>xj

问你最多能选出多少人投钱(投多少无所谓,不关心)


设最后选了 k k k个人

化简一下 x i ∗ A i + B i A i > ∑ j = 1 k x j x_i*\frac{A_i+B_i}{A_i}>\sum\limits_{j=1}^k x_j xiAiAi+Bi>j=1kxj

也就是 x i ∑ j = 1 k x j > A i A i + B i \frac{x_i}{\sum\limits_{j=1}^k x_j}>\frac{A_i}{A_i+B_i} j=1kxjxi>Ai+BiAi

i i i取值为 [ 1 , k ] [1,k] [1,k]得到 k k k个不等式,相加得到

1 > ∑ A i A i + B i 1>\sum\frac{A_i}{A_i+B_i} 1>Ai+BiAi

所以我们贪心选 A i A i + B i \frac{A_i}{A_i+B_i} Ai+BiAi小的,不大于一就行

#include 
using namespace std;const int maxn = 1009;int casenum;long double p[maxn];int main(){
int t; cin >> t; while( t-- ) {
int n; scanf("%d",&n); long double x,y; for(int i=1;i<=n;i++) {
scanf("%Lf:%Lf",&x,&y); p[i] = x/(x+y); } long double sum = 0; sort( p+1,p+1+n ); int ans = 0; for(int i=1;i<=n;i++) {
sum += p[i]; if( sum>=1 ) break; ans++; } printf("Case #%d: %d\n",++casenum,ans); }}

转载地址:https://issue-is-vegetable.blog.csdn.net/article/details/116046007 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:gym101237 C. The Palindrome Extraction(SAM+manecher)
下一篇:gym/101194 H Great Cells(思维,贡献法)

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月26日 22时11分19秒