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 ; }