减肥计划

版权声明:未经过同意不得转载 https://blog.csdn.net/qq_42500298/article/details/83107194

在这里插入图片描述
在这里插入图片描述
Σ a i \Sigma{ai} 一定的时候, Σ b i \Sigma{bi} 越大越好。f[i]s[i]表示前i个景点,当 Σ a \Sigma{a} =j时 Σ b \Sigma{b} 的最大值,就和背包问题一样。

#include<bits/stdc++.h>
#define maxn 11111111
using namespace std;
long long n,m,i,j,p=1,q,d,a[maxn],b[maxn],f[maxn],s[maxn];
int main()
{
 scanf("%lld%lld",&n,&m);
 for(i=1;i<=n;i++)
 {
  scanf("%lld%lld",&a[i],&b[i]); 
  s[i]=s[i-1]+a[i];
 }
 for(j=0;j<=s[n];j++)
  f[j]=-2147483647;
 f[0]=0;
 for(i=1;i<=n;i++) 
  for(j=min(s[i],110000ll);j>=a[i];j--) 
   f[j]=max(f[j],f[j-a[i]]+b[i]);
 for(i=m;i<=s[n];i++) 
  if(f[i]*1.0/i>=q*1.0/p) 
   p=i,q=f[i];
 d=__gcd(p,q); 
 p/=d; 
 q/=d;
 if(p==1&&!q) 
  puts("-1"); 
 else 
  printf("%lld/%lld",q,p);
 return 0; 
}

来源:zr

猜你喜欢

转载自blog.csdn.net/qq_42500298/article/details/83107194