首页 > 其他分享 >分数规划学习笔记

分数规划学习笔记

时间:2024-06-07 18:38:02浏览次数:22  
标签:分数 int sum mid 笔记 times ge 规划 ll

1. 用途

分数规划常用于求一个分式的极值,就是给出两个序列\(a_i\)和\(b_i\),使得\(\dfrac{\sum a_i\times w_i}{\sum b_i\times w_i}\)的值最大或最小,其中\(w \in \{0,1\}\)

通常,题目中还会有类似于\(\sum b_i>w\)的限制

2. 解法

通常使用二分,记当前二分的值为mid

\[\begin{aligned}&\because \dfrac{\sum a_i\times w_i}{\sum b_i\times w_i}\ge mid\\&\therefore \sum a_i\times w_i\ge mid\times \sum b_i\times w_i\\&\therefore\sum a_i\times w_i-mid\times \sum b_i\times w_i\ge 0\\&\therefore \sum w_i \times (a_i-mid\times b_i)\end{aligned} \]

所以,在每一次check的时候,求出不等式右边的最大值判断即可,而这一部分显然可以用0/1背包完成

3. 例题

P4377 [USACO18OPEN] Talent Show G

按照上述方法二分即可,对于重量的限制可以以重量为下标,求0/1背包判断即可

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int n,w,a[255],b[255];
ll f[10005];
bool check(int x)
{
	memset(f,128,sizeof(f));
	f[0]=0;
	ll tmp=f[w];
	for(int i=1;i<=n;i++)
	{
		for(int j=w;j>=0;j--)
		{
			if(tmp==f[j]) continue;
			int k=j+a[i];
			k=min(k,w);
			f[k]=max(f[k],f[j]+b[i]-1ll*a[i]*x);
		}
	}
	if(f[w]>=0) return 1;
	return 0;
}
int main()
{
	scanf("%d%d",&n,&w);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&a[i],&b[i]);
		b[i]*=1000;
	}
	int l=0,r=100000;
	while(l<r)
	{
	//	printf("%d %d\n",l,r);
		int mid=(l+r+1)>>1;
		if(check(mid))
		{
			l=mid;
		}
		else r=mid-1;
	}
	printf("%d",l);
	return 0;
}

标签:分数,int,sum,mid,笔记,times,ge,规划,ll
From: https://www.cnblogs.com/wangsiqi2010916/p/18237689

相关文章

  • 【Java笔记】第十章:接口
    一、理解1.接口:是一种标准,接口的实现者和使用者都必须遵循的约定2.语法特点:(1)接口的关键字:interface(2)接口的语法:   interface接口名{}(3)接口不能创建对象,可以声明引用(4)接口中的属性都是公开的、静态的、常量(默认被public、static、final修饰)(......
  • 机器学习笔记(2): Logistic 回归
    Logistic回归是线性回归中一个很重要的部分。Logistic函数:\[\sigma(x)=\frac{L}{1+\exp(-k(x-x_0))}\]其中:\(L\)表示最大值\(x_0\)表示对称中心\(k\)表示倾斜度一般来说,都将\(L\)设为\(1\),而\(k\)和\(x_0\)在参数中控制。认为特征只有一个,那么自......
  • [设计模式 1] 设计模式笔记(大话设计模式总结)
    设计模式总结(java版1)1.简单工厂模式需求:设计一个计算器,有一个抽象的运算类,他里边有两个数字属性和一个getResult()抽象方法,这个类被四个加减乘除的具体的算法类继承,然后有一个简单工厂类,这个简称工厂类是用来生成一个具体的运算类的,然后就在简单工厂类里有一个逻辑的判......
  • Visual Instruction Tuning论文阅读笔记
    Motivation&AbsMotivation:之前基于LLM的通用助手仅能处理文本。数据:使用纯语言的GPT4生成多模态语言-图像指令数据。模型:基于生成数据端到端训练的模型LLaVA,用于通用视觉语言理解。指标:两个benchmark。GPT-assistedVisualInstructionDataGeneration现有的多模态指令数......
  • 点分治 学习笔记
    引入在点分治的过程中,它的遍历顺序会遍历每棵子树的重心,而这棵由重心生成的树会产生一棵新的树,便是点分树。常用来解决树上与树的形态无关的路径问题。过程如下图,它的点分树是它自己。因此可以看出一棵树的点分树可能是它本身。性质因为点分树\(\mathcal{O}(\logn)\)......
  • 不凡学院笔记
    Vue前端性能难题Vue前端性能问题通常涉及到如何优化组件渲染性能,减少不必要的DOM更新,以及处理大量数据的渲染和滚动性能。以下是一些常见的Vue前端性能问题及其解决方案:避免在v-for循环中使用key,除非你明确知道元素的交互方式。解决方案:使用唯一且稳定的ID作为key。避免在模板......
  • 得帆云学习笔记
    数仓规划数仓规划是开发人员对业务的解析、分类和提炼的过程。数仓开发人员需要根据对整体业务的理解来划分出不同业务领域、业务领域下对应的数据域、以及数据域下的业务过程。根据业务的类型或其他特征来划分业务领域。根据该业务下再细分出的类别来划分数据域。根据业务中......
  • 推荐系统三十六式学习笔记:原理篇.内容推荐07|人以群分,你是什么人就看到什么世界
    目录协同过滤基于用户的协同过滤背后的思想原理实践1、构造矩阵2、相似度计算3、推荐计算4、一些改进应用场景:总结谈及推荐系统,不得不说大名鼎鼎的协同过滤。协同过滤的重点在于协同,所谓协同,也就是群体互帮互助,互相支持是群体智慧的体现,协同过滤也是这般简单直接,历......
  • 读书笔记分享
    1.绝大多数父母都是爱孩子的,可他们却不是称职的父母。世界上任何职业都要培训、考核、竞争上岗,唯有“父母”这个职业是没有这些程序,只要生了小孩,就是天经地义的父母。2.由于自身工作特点,“白领”们的部分器官和组织,如脑组织、视觉神经、颈椎等经常处于过度紧张状态,如果不......
  • 进程间通信九天学习笔记
    进程间通信九天学习笔记day1:基本进程操作fork()返回pid进程idgetpid()获取当前进程IDsystem()执行系统命令day2:管道匿名管道pipe(intpipefd[2])pipefd[0]读操作pipefd[1]写操作有名管道(FIFO)mkfifo(,0644)open()read()write()day3:信号标准......