zoukankan      html  css  js  c++  java
  • [CF489E] Hiking

    前言

    笔者01分数规划入门题

    这是一篇水过去的博客!

    题目

    洛谷

    CF

    讲解

    01分数规划问题,即有一个形如(frac{sum a_i}{sum b_i})的式子,求最大值或者最小值

    本题是求最小值,即我们要求一个最小的(x)满足(frac{sum a_i}{sum b_i}ge x)

    我们将式子变形,即为(sum a_i-x*sum b_ige 0)

    对于解决这类问题的方法是二分(x)

    完事了

    代码

    bool check(double x)
    {
    	for(int i = 1;i <= n;++ i) dp[i] = INF;
    	dp[0] = 0;
    	for(int i = 1;i <= n;++ i)
    		for(int j = 0;j < i;++ j)
    		{
    			double t = dp[j] + sqrt(Abs(p[i] - p[j] - L)) - x * b[i];
    			if(dp[i] > t) dp[i] = t,pre[i] = j;
    		}
    	return dp[n] >= 0;
    }
    void print(int x)
    {
    	if(!x) return;
    	print(pre[x]);
    	Put(x,' ');
    }
    
    int main()
    {
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    	n = Read(); L = Read();
    	for(int i = 1;i <= n;++ i) p[i] = Read(),b[i] = Read();
    	double l = 0,r = 1e6;
    	while(Abs(l-r) > eps)
    	{
    		double mid = (l+r) / 2;
    		if(check(mid)) l = mid;
    		else r = mid;
    	}
    	check(l);
    	print(n);
    	return 0;
    }
    
  • 相关阅读:
    LVS DR模式的简单应用
    Linux新加硬盘如何识别 分区 持续挂载
    13周作业
    12周作业
    2次月考
    10周作业
    9周作业
    8周作业
    7周作业
    6周作业
  • 原文地址:https://www.cnblogs.com/PPLPPL/p/13767613.html
Copyright © 2011-2022 走看看