bzoj 5281 [Usaco2018 Open]Talent Show——0/1分数规划
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5281
把分子乘1000,就能在整数里做了。
这种水题也花了这么久……
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define ll long long using namespace std; const int N=255,M=1005; int n,lm,v[N],c[N],l,r,mid,ans; ll a[N],dp[M]; bool check() { for(int i=1;i<=n;i++) a[i]=c[i]-(ll)mid*v[i]; memset(dp,-2,sizeof dp); dp[0]=0; for(int i=1;i<=n;i++) for(int j=lm;j>=0;j--) dp[min(lm,j+v[i])]= max(dp[min(lm,j+v[i])],dp[j]+a[i]); return dp[lm]>=0; } int main() { scanf("%d%d",&n,&lm); for(int i=1;i<=n;i++) { scanf("%d%d",&v[i],&c[i]); c[i]*=1000; r+=c[i]; } while(l<=r) { mid=l+r>>1; if(check())ans=mid,l=mid+1; else r=mid-1; } printf("%d\n",ans); return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步