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

解题报告正解是状压dp,当时做反正就贪心贪过去了。。。运气真好。。。

View Code
#include <iostream>
#include <algorithm>
using namespace std ;
typedef struct L
{
    int dps,hp ;
    double ab ;
}L ;
L kk[1001] ;
bool cmp(L a,L b)
{
    return a.ab>b.ab ;
}
int main()
{
    int n ;
    while(~scanf("%d",&n))
    {
        int sum=0 ;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&kk[i].dps,&kk[i].hp) ;
            kk[i].ab=kk[i].dps*1.0/kk[i].hp ;
            sum+=kk[i].dps ;
        }
        sort(kk,kk+n,cmp) ;
        int ans=0 ;
        for(int i=0;i<n;i++)
        {
            ans+=sum*kk[i].hp ;
            sum-=kk[i].dps ;
        }
        printf("%d\n",ans) ;
    }
    return 0 ;
}