1892: 背包问题 时间限制: 3 Sec 内存限制: 64 MB 提交: 41 解决: 28 您该题的状态:已完成 [提交][状态][讨论版] 题目描述 现在有很多物品(它们是可以分割的)

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct h {
    int v;
    int w;
} a[5500];
int cmp(h x,h y) {
    return x.v>y.v;
    if(x.v==y.v)
        return x.w>y.w;
}
int main() {
    int T;
    scanf("%d",&T);
    while(T--) {
        int n,i,s,m;
        scanf("%d %d",&s,&m);
        for(i=0; i<s; i++)
            scanf("%d %d",&a[i].v,&a[i].w );
        sort(a,a+s,cmp);
        int k=0;

        for(i=0; i<s; i++) {
            if(m>=a[i].w) {
                m=m-a[i].w;
                k=a[i].w*a[i].v+k;
            } else {
                k=k+m*a[i].v;
                break;
            }
        }
        printf("%d\n",k);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40835329/article/details/81262518