题解Luogu P4377 Talent Show
Posted gengyf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解Luogu P4377 Talent Show相关的知识,希望对你有一定的参考价值。
01分数规划+背包
t[i]读入时*1000,不用小数而满足题目要求
由于W比较小而w[i]很大,枚举W
当w[i]>W 时必满足,所以直接使w[i]>W的贡献算在f[W]上
求Σt[i]/Σw[i]的最大值,ans=Σt[i]/Σw[i],即Σ(t[i]-w[i]*ans)
二分ans然后正常01背包
// // main.cpp // Luogu // // Created by gengyf on 2019/7/7. // Copyright © 2019 yifan Geng. All rights reserved. // #include <bits/stdc++.h> using namespace std; int n,W; int w[300],t[300]; long long f[10005]; bool check(int x) memset(f,128,sizeof(f)); f[0]=0; long long tmp=f[W]; for(int i=1;i<=n;i++) for(int j=W;j>=0;j--) if(f[j]!=tmp) int y=j+w[i]; y=min(y,W); f[y]=max(f[y],f[j]+t[i]-(long long)w[i]*x); return f[W]>=0; int main() scanf("%d%d",&n,&W); for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&t[i]); t[i]*=1000; int l=0,r=1000000; while(l<=r) int mid=(l+r)>>1; if(check(mid))l=mid+1; else r=mid-1; printf("%d",l-1); return 0;
以上是关于题解Luogu P4377 Talent Show的主要内容,如果未能解决你的问题,请参考以下文章