【贪心】【01规划】luogu 1570 KC喝咖啡

题目链接:http://oj.luogu.org:8888/problemshow.php?pid=1570

分析:
1、裸搞。

按比值降序排列,然后去前m个

60分。

2、0 1 分数规划

 关于 0 1 规划:http://blog.csdn.net/hhaile/article/details/8883652

设最终答案为R,x[i]为0或1,则 Σ(v[i]*x[i]) / Σ(c[i]*x[i]) = R

即 Σ(v[i]*x[i]) - Σ(c[i]*x[i]*R) =0

即 Σ[(v[i]*x[i]) - (c[i]*x[i]*R)] =0

设 f(R)= Σ[(v[i]*x[i]) - (c[i]*x[i]*R)]

二分R,求f(R)=0

当f(R)<0时,R偏大

当f(R)>0时,R偏小

计算每一对 v[i] - (c[i]*R),排序求前m大的和即为f(R) 。

代码:

60:

#include<cstdio>  
#include<cmath>  
#include<algorithm>  
using namespace std;  
typedef struct  
{  
    int a,b;  
    double c;  
} nc;  
nc t[201];  
int n,m,i;  
bool cmp(nc a1,nc a2)  
{  
    if (fabs(a1.c-a2.c)<0.00000001) return a1.a<a2.a;  
  else  return a1.c>a2.c;  
}  
int main()  
{  
    scanf("%d%d",&n,&m);  
    for (i=1;i<=n;i++) scanf("%d",&t[i].a);  
    for (i=1;i<=n;i++)  
     {  
        scanf("%d",&t[i].b);  
        t[i].c=t[i].a/(t[i].b*1.0);  
     }  
    sort(t+1,t+1+n,cmp);  
    int m1=0,m2=0;  
    for (i=1;i<=m;i++)  
     {  
        m1+=t[i].a;  
        m2+=t[i].b;  
     }  
    printf("%.3lf",m1/(m2*1.0));  
    return 0;  
      
}  

100:

#include<cstdio>  
using namespace std;  
int n,m,i,j,k;double ma,ans1,ans2;bool b[205];  
struct jgtt  
{  
  double c,v;  
}a[205];  
int main()  
{  
  scanf("%d%d",&n,&m);  
  for(i=1;i<=n;i++)  
  scanf("%lf",&a[i].v);  
  for(i=1;i<=n;i++)  
  scanf("%lf",&a[i].c);  
  ans1=0;ans2=0;  
  for(i=1;i<=m;i++)  
  {  
    ma=0;int ji;  
    for(j=1;j<=n;j++)  
    if(!b[j]&&((a[j].v+ans1)/(a[j].c+ans2))>ma)  
    {  
      ma=(a[j].v+ans1)/(a[j].c+ans2);  
      ji=j;  
    }  
    b[ji]=1;  
    ans1+=a[ji].v;  
    ans2+=a[ji].c;  
  }  
  printf("%0.3f",ans1/ans2);  
}   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值