减肥计划
减肥计划
Σai\Sigma{ai}一定的时候,Σbi\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

相关文章:

  • 2021-11-29
  • 2021-04-15
  • 2021-08-01
  • 2021-09-27
  • 2021-11-12
  • 2021-10-13
  • 2021-11-21
  • 2021-11-23
猜你喜欢
  • 2021-10-25
  • 2021-09-05
  • 2021-07-01
  • 2021-08-15
  • 2020-01-12
  • 2021-05-05
  • 2021-10-25
相关资源
相似解决方案