hdu 4310 Hero

http://acm.hdu.edu.cn/showproblem.php?pid=4310

这个题 根据优先级排个序就可以了

#include<iostream>

#include<cstdio>

#include<algorithm>

#include<cstring>

#include<cmath>

#include<map>

#include<cmath>

#define LL long long



using namespace std;



const int N=30;

struct node

{

    int H,D;

}mem[N];

bool cmp(node a,node b)

{

    return (a.H*(a.D+b.D)+b.H*b.D)<(b.H*(a.D+b.D)+a.H*a.D);

}

int main()

{

    int n;

    while(scanf("%d",&n)!=EOF)

    {

        int sum=0;

        for(int i=0;i<n;++i)

        {

            scanf("%d %d",&mem[i].D,&mem[i].H);

            sum+=mem[i].D;

        }

        sort(mem,mem+n,cmp);

        LL ans=0;

        for(int i=0;i<n;++i)

        {

            ans+=(LL)(sum*mem[i].H);

            sum-=mem[i].D;

        }

        cout<<ans<<endl;

    }

    return 0;

}

  

你可能感兴趣的:(HDU)