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

直接贪心

View Code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
struct node{
    int p,m;
}kk[110];
int cmp(const void*a,const void*b)
{
    struct node*c=(struct node*)a;
    struct node*d=(struct node*)b;
    return d->p-c->p;
}
int main()
{
    int v,n,i,cnt,pp;
    while(scanf("%d",&v),v)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d%d",&kk[i].p,&kk[i].m);
        qsort(kk,n,sizeof(struct node),cmp);
        cnt=pp=0;
        while(1){
            pp+=kk[cnt].m*kk[cnt].p;
            v-=kk[cnt].m;
            if(v<0)
            {
                pp-=kk[cnt].m*kk[cnt].p;
                v+=kk[cnt].m;
                pp+=v*kk[cnt].p;
                v=0;
            }
            cnt++;
            if(cnt==n||v==0)break;
        }
        printf("%d\n",pp);
    }
    return 0;
}