P2240部分揹包問題
題目選自洛谷
題目思路:用結構體存儲金幣總量和價值用排序優先拿走單位價格大的金幣。代碼附下:
#include<stdio.h>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int m;
int v;
double dw;
}pp[105];
int cmp(node pp,node b)
{
return pp.dw>b.dw;
}
int main()
{
int n,t,z=0;
double v1=0;
cin>>n>>t;
for(int i=0;i<n;i++)
{
cin>>pp[i].m>>pp[i].v;
pp[i].dw=(double)pp[i].v/pp[i].m;
}
sort(pp,pp+n,cmp);
for(int i=0;i<n;i++)
{
if(t-pp[i].m>=0)
{
t-=pp[i].m;
v1+=pp[i].v;
z++;
}else
{
v1+=(pp[z].dw*t);
break;
}
}
printf("%.2lf",v1);
return 0;
}