//此为背包问题 ,289为0-1背包 #include<stdio.h> #include<stdlib.h> typedef struct data { int w; int v; }data; int cmp(const void *a,const void *b) { return ((data*)a)->v-((data*)b)->v; }//不加括号不行啊 int main() { data a[10]; int T,v,w,sum,s,m; scanf("%d",&T); while(T--) { sum=0; scanf("%d%d",&s,&m); for(int i=0;i<s;i++) scanf("%d%d",&a[i].v,&a[i].w); qsort(a,s,sizeof(data),cmp); for(int i=s-1;m>0;i--) //发现i也要加上int,否则\调试\未命名1.cpp name lookup of `i' changed for new ISO `for' scoping if(a[i].w<=m) { sum+=a[i].v*a[i].w; m-=a[i].w; } else { sum+=m*a[i].v; m=0; } printf("%d\n",sum); } system("pause"); return 0; }