当前位置: 首页> 娱乐> 明星 > 建设雅马哈摩托车官网_网站联盟的收益模式_网站排名软件利搜_网络营销师怎么考

建设雅马哈摩托车官网_网站联盟的收益模式_网站排名软件利搜_网络营销师怎么考

时间:2025/7/14 18:39:58来源:https://blog.csdn.net/xuxizhe0104/article/details/147129299 浏览次数:0次
建设雅马哈摩托车官网_网站联盟的收益模式_网站排名软件利搜_网络营销师怎么考

好久没发博客了……浅浅复活一下,讲个冷门些的算法。

算法目的:选出k组ai,bi使得  \frac{\sum ai }{\sum bi} 最大。

算法过程:

不妨考虑二分答案,那么答案的形式便是 \frac{\sum ai }{\sum bi}\geq k 的形式,则可通过移项转化为\sum ai - k*\sum bi\geq 0,进一步的,我们可以将求和合并,则有\sum ai-k*bi\geq 0,这便是二分检验的条件,只需挑出满足条件的k组即可,该算法考不出太新鲜的,至多是二分加优化。

那么我们来看一道例题

P4377 [USACO18OPEN] Talent Show G

简化一下题意:选出任意组ai,bi使得\frac{\sum ai }{\sum bi}最大,且\sum bi\geq W。那么看到该限制条件,只需在二分时使用01背包优化即可。最后输出为答案*1000向下取整。

代码:

#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int maxn=1e5+10;
int n,w,a[maxn],b[maxn];
double f[maxn]; 
bool check(double mid){for(int i=1;i<=w;i++) f[i]=-1e9;for(int i=1;i<=n;i++){for(int j=w;~j;j--){f[min(w,j+b[i])]=max(f[min(w,j+b[i])],f[j]+a[i]-mid*b[i]);}}return f[w]>=0;
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>w;for(int i=1;i<=n;i++) cin>>b[i]>>a[i];double l=0,r=1e6;while(r-l>1e-4){double mid=(l+r)/2;if(check(mid)) l=mid;else r=mid;}cout<<(int)(1000*l)<<endl;return 0;
}

关键字:建设雅马哈摩托车官网_网站联盟的收益模式_网站排名软件利搜_网络营销师怎么考

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: