0
点赞
收藏
分享

微信扫一扫

hdu4882 水贪心

紫荆峰 2022-07-18 阅读 22

题意:
     给你n个任务,每个任务有两个权值,t[i],b[i],前面的是完成任务所需时间,后面的那个是个参数,每个任务完成的代价是完成当前任务总时间(之前的+现在的)
sumt * b[i],问你完成所有任务的总花费最小是多少。
思路:
     水贪心吧,不给证明了,没啥意思,就想象一下,那个东西价值贵就先干那个就行了

价值等于 b[i] / t[i],价值贵的放到最后干会吃亏的。


#include<stdio.h>
#include<algorithm>

using namespace std;

typedef struct
{
__int64 x ,y;
double key;
}NODE;

bool camp(NODE a ,NODE b)
{
return a.key > b.key;
}

NODE node[110000];

int main ()
{
int n ,i;
while(~scanf("%d" ,&n))
{
for(i = 1 ;i <= n ;i ++)
scanf("%I64d" ,&node[i].x);
for(i = 1 ;i <= n ;i ++)
{
scanf("%I64d" ,&node[i].y);
node[i].key = node[i].y * 1.0 / node[i].x;
}
sort(node + 1 ,node + n + 1 ,camp);
__int64 sum = 0 ,ans = 0;
for(i = 1 ;i <= n ;i ++)
{
sum += node[i].x;
ans += sum * node[i].y;
}
printf("%I64d\n" ,ans);
}
return 0;
}




举报

相关推荐

0 条评论