Talent Show G
题目网址:https://www.luogu.com.cn/problem/solution/P4377
题目思路:
把牛当作物品,重量当作cost,才艺值当作value。就是一道裸的0/1背包题了。
dp[i][j]表示,前ii头牛,重量恰好为jj,可以取到的最大比值(ratio)。
最后的答案就是:
(其中C为题目中给的W,weight[i]为题目中给的w[i]。)
代码:
```cpp
在这里#include<bits/stdc++.h>
#define INF 9999999999999 //定义最大
using namespace std;
long long n,c;
long long w[255],t[255];
long long sum;
long long dp[300005];
int main()
{
long long i,j;
cin>>n>>c;
for(i=1;i<=n;i++)
{
cin>>w[i]>>t[i];
sum+=t[i];
}
for(i=0;i<=sum+1;i++)
dp[i]=INF;
dp[0]=0;//初始化
for(i=1;i<=n;i++)
for(j=sum;j>=t[i];j--)
{
long long tw=dp[j-t[i]]+w[i];
dp[j]=min(dp[j],tw);
}
long double ans=0;
for(i=1;i<=sum;i++)
if(dp[i]>=c&&dp[i]<INF)
ans=max(ans,((long double)(i)/(long double)(dp[i])));
cout<<((long long)(ans*1000.0))<<endl;
return 0;
}