背包问题

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;

struct  bb
{
  int a;
  int b;          
}d[22];
int cmp(bb x,bb y)
{
    if(x.a!=y.a)
     return x.a>y.a;
     return x.b>y.b;
}
int main()
{     int T,v,w,k,s,i,m,sum;
      scanf("%d",&T);
      while(T--)
      { memset(d,0,sizeof(d));
        scanf("%d %d",&s,&m);
        for(i=0;i<s;i++)
        scanf("%d %d",&d[i].a  ,&d[i].b);
        sort(d,d+m,cmp);
       
          for(sum=k=i=0;i<s&&k<m;i++)
       do{
          if(k==m)
            break;
           else
            k++;
           sum+=d[i].a;
            }while(--d[i].b);

         printf("%d\n",sum);
               
      }
      return 0;
}

posted @ 2013-08-15 21:20  hpu张亚飞  阅读(136)  评论(0编辑  收藏  举报