2 条题解
-
0
tjh:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const double eps=1e-5; int n,W; long double b[255],a[255],dp[1010]; struct N{ long double x; ll w; }c[255]; bool cmp(N a,N b){ if(fabs(a.x-b.x)>eps&&max(a.x,b.x)>0)return a.x<b.x; if(fabs(a.x*b.w-b.x*a.w)>eps)return a.x*b.w<b.x*a.w; return a.w<b.w; } bool check(long double L){ for(int i=1;i<=n;i++)c[i]={a[i]-L*b[i],b[i]}; for(int i=1;i<=W;i++)dp[i]=-1e18; for(int i=1;i<=n;i++){ for(int j=W;j>=0;j--){ int jj=j+c[i].w; if(jj>W)jj=W; dp[jj]=max(dp[jj],dp[j]+c[i].x); } } return dp[W]>=0; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n>>W; for(int i=1;i<=n;i++)cin>>b[i]>>a[i]; long double l=0,r=1000; while(r-l>eps){ long double mid=(l+r)/2; if(check(mid))l=mid; else r=mid; } cout<<(int)((l+eps)*1000); return 0; } -
0
tjh:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const double eps=1e-5; int n,W; long double b[255],a[255],dp[1010]; struct N{ long double x; ll w; }c[255]; bool cmp(N a,N b){ if(fabs(a.x-b.x)>eps&&max(a.x,b.x)>0)return a.x<b.x; if(fabs(a.xb.w-b.xa.w)>eps)return a.xb.w<b.xa.w; return a.w<b.w; } bool check(long double L){ for(int i=1;i<=n;i++)c[i]={a[i]-L*b[i],b[i]}; for(int i=1;i<=W;i++)dp[i]=-1e18; for(int i=1;i<=n;i++){ for(int j=W;j>=0;j--){ int jj=j+c[i].w; if(jj>W)jj=W; dp[jj]=max(dp[jj],dp[j]+c[i].x); } } return dp[W]>=0; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n>>W; for(int i=1;i<=n;i++)cin>>b[i]>>a[i]; long double l=0,r=1000; while(r-l>eps){ long double mid=(l+r)/2; if(check(mid))l=mid; else r=mid; } cout<<(int)((l+eps)*1000); return 0; }
- 1
信息
- ID
- 6795
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 75
- 已通过
- 15
- 上传者