#P1579. 部分背包问题

部分背包问题

Description

Input Format

Output Format

一个实数表示答案,输出两位小数
4 50
10 60
20 100
30 120
15 45
240.00

Hint

样例中的最大价值为:第一堆,第二堆金币全部拿走,第三堆金币拿走20的重量,这样的总重量为10+20+20=50,总价值为60+100+80=240


struct node{
    int w,m;
    double val;
}coin[M];
int n,t,tot;
double ans;
bool cmp(node a,node b)
{
    return a.val>b.val;
}
int main()
{
    scanf("%d%d",&n,&t);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&coin[i].m,&coin[i].w);
        coin[i].val=(double)coin[i].w/coin[i].m;
    }
    sort(coin+1,coin+n+1,cmp);

Source

贪心