洛谷-基础-递推与二分笔记

洛谷OJ - P1316 - 丢瓶盖(二分答案) 题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入 第一行,两个整数,A,B。(B 第二行,A个整数,分别为这A个瓶盖坐标。 输出仅一个整数,为所求答案。 样例输入 5 3 1 2 3 4 5 样例输出 2 题 阅读详情

洛谷-基础-递推与二分笔记

P1192 台阶问题

题目描述

有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少11级),问到达第N级台阶有多少种不同方式。

输入格式

两个正整数N,K。

输出格式

一个正整数,为不同方式数,由于答案可能很大,你需要输出ans % 100003后的结果。

思路

​ 这个是典型的递推思路,类似于斐波拉契数列

#include<iostream>
using namespace std;
int n,m;
long long ans[100008];
int main(){
	cin>>n>>m;
	ans[0] = 1;
	for(int i = 1;i <= n;i++) {
		for(int j = 1;j <= m;j++){
			if(i - j < 0){
				break;
			}
			ans[i] = (ans[i] + ans[i - j])%100003;
		}
	}
	cout<<ans[n];
	return 0;
} 

P1025 数的划分

题目描述

将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:n=7,k=3,下面三种分法被认为是相同的。

1,1,5;
1,5,1;
5,1,1.

问有多少种不同的分法。

输入格式

n( 所属区间(6,200] ),k( 所属区间[2,6])

输出格式

1个整数,即不同的分法。

思路

​ 使用组合数学思想,形成一个动态规划递推式

  1. 至少有一个盒子只有一个小球的情况数
  2. .没有一个盒子只有一个小球的情况数
#include<iostream>
using namespace std;
//动态规划 
//分俩种情况 
int n,k;
int f[205][8]; 
int main(){
	cin>>n>>k;
	for (int i=1;i<=n;i++) {
		f[i][1]=1;
		f[i][0]=1;
	}
	for (int i=2;i<=n;i++){
		for (int x=2;x<=k;x++){
			if (i>x) {
			 	f[i][x]=f[i-1][x-1]+f[i-x][x];
			}	  
            else {
            	f[i][x]=f[i-1][x-1];
            } 
		}
	}
    cout<<f[n][k];
	return 0;
} 

P1057 传球游戏

题目描述

上体育课的时候,小蛮的老师经常带着同学们一起做游戏。这次,老师带着同学们一起做传球游戏。

游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同学可以把球传给自己左右的两个同学中的一个(左右任意),当老师再次吹哨子时,传球停止,此时,拿着球没有传出去的那个同学就是败者,要给大家表演一个节目。

聪明的小蛮提出一个有趣的问题:有多少种不同的传球方法可以使得从小蛮手里开始传的球,传了m**次以后,又回到小蛮手里。两种传球方法被视作不同的方法,当且仅当这两种方法中,接到球的同学按接球顺序组成的序列是不同的。比如有三个同学1号、2号、3号,并假设小蛮为1号,球传了3次回到小蛮手里的方式有1->2->3->1和1->3->2->1,共2种。

输入格式

一 行 , 有 两 个 用 空 格 隔 开 的 整 数 n , m 。 ( 3 &lt; = n &lt; = 30 , 1 &lt; = m &lt; = 30 ) 一行,有两个用空格隔开的整数n,m。(3 &lt;= n &lt;= 30,1 &lt;= m &lt;= 30) 一行,有两个用空格隔开的整数n,m。(3<=n<=30,1<=m<=30)

输出格式

1个整数,表示符合题意的方法数。

思路

​ 一开始,我使用简单的递归,发现超时大部分数据点

​ 然后使用动态规划 (更像当于是递推)

#include<iostream>
using namespace std;
int n,m;
int ans;
/* 50分基础递归 
void solve(int step,int now){
	if(now == 0){
		now = n;
	}
	if(now == n + 1){
		now = 1;
	}
	if(step == m){
		if(now == 1){
			ans++;
		}
		return;
	}
	else{
		solve(step + 1,now + 1);
		solve(step + 1,now - 1);
	}
}
int main(){
	cin>>n>>m;
	solve(0,1); 
	cout<<ans;
	return 0;
}
*/
int f[31][31];
int main(){
	cin>>n>>m;
	f[1][0] = 1;
	for(int k = 1;k <= m;k++) {
		f[1][k] = f[n][k - 1] + f[2][k - 1];
		for(int i = 2;i < n;i++) {
			f[i][k] = f[i - 1][k - 1] + f[i + 1][k - 1];
		}
		f[n][k] = f[1][k - 1] + f[n - 1][k - 1];
	}
	cout<<f[1][m];
	return 0;
}

P1216 数字三角形

题目描述

观察下面的数字金字塔。

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。

         7 
      3   8 
    8   1   0 
  2   7   4   4 
4   5   2   6   5 

在上面的样例中,从7 到 3 到 8 到 7 到 5 的路径产生了最大

输入格式

第一个行包含 R(1<= R<=1000) ,表示行的数目。

后面每行为这个数字金字塔特定行包含的整数。

所有的被供应的整数是非负的且不大于100。

输出格式

单独的一行,包含那个可能得到的最大的和

思路

​ 动态规划,为了方便动态,采取从金字塔底部向上的做法

#include<iostream>
using namespace std;
int r;
int f[2000][2000];
int a[2000][2000];
int imax(int x,int y) {
	return x > y? x:y;
}
int main(){
	cin>>r;
	for(int i = 1;i <= r;i++){
		for(int j = 1;j <= i;j++){
			cin>>f[i][j];
			a[i][j] = f[i][j];
		}
	}
	for(int i = r - 1;i >= 1;i--) {
		for(int j = 1;j <= r ;j++) {
			f[i][j] = imax(f[i + 1][j],f[i + 1][j + 1]) + a[i][j];
		}
	}
	cout<<f[1][1];
	return 0;
}

P1182 数列分段 Section II

题面信息

在这里插入图片描述

思路

最大值最小化,最小值最大化 - 二分法+贪心

#include<iostream>
using namespace std;
int n,m;
int a[100008];
int imax(int x,int y) {
	return x > y ? x:y;
} 
int lef;
int rig;
int total = 0;
int tim = 0;
int ans = 0;
bool judge(int x,int a[]){
	total = 0;
	tim = 0;
    for(int i=0;i<n;i++){
        if(total+a[i]<=x){
        	total+=a[i];
        }
        else{
        	total=a[i];
			tim++;	
        } 
    }
    return tim>=m;
}
int main() {
	cin>>n>>m;
	for(int i = 0;i < n;i++) {
		cin>>a[i];
		lef = imax(lef,a[i]);
		rig+=a[i];
	}
	//cout<<"fuck";
	//return 0;
	while(lef<=rig){
		int mid = (lef + rig) / 2;
		if(judge(mid,a)){
            ans = mid;
			lef  = mid + 1;
		}
		else{
			rig = mid - 1;
		}
		
	}
	cout<<ans;
	
	return 0;
}

P1316 丢瓶盖

题目描述

陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?

输入格式

第一行,两个整数,A,B。(B<=A<=100000)

第二行,A个整数,分别为这A个瓶盖坐标。

输出格式

仅一个整数,为所求答案。

思路

最小值最大化问题 -> 二分法 + 贪心

其实,最主要的代码部分就是judge函数的编写

至于最后答案的输出,可以尝试一下,来对比获得.

#include<iostream>
#include<algorithm>
using namespace std;
int a,b;
int p[100008];
int ans;
bool judge(int limit){
	int total = 1;
	int here = 1;
	for(int i = 2;i <= a;i++){
		if(p[i] - p[here] >= limit){
			total++;
			here = i;
		}
	}
	if(total >= b){
		return true;
	}
	else{
		return false;
	}
} 
int main() {
	cin>>a>>b; 
	for(int i = 1;i <= a;i++) {
		cin>>p[i];
	}
	sort(p+1,p+a+1);
	int l = 1;
	int r = p[a] - p[l];
	while(l<=r){
		int mid = (l + r) / 2;
		if(judge(mid)){
			ans = mid;
			l = mid + 1;
		}
		else{
			
			r = mid - 1;
		}
	}
	cout<<ans;
	return 0;
}

洛谷P1316 丢瓶盖(二分) 题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出格式 输入格式:   第一行,两个整数,A,B。(B&lt;=A&lt;=100000) 第二行,A个整数,分别为这A个瓶盖坐标。   输出格式:   仅一个整数,为所求答案。 ... 阅读详情

相关推荐

洛谷 - 试炼场(全部题目备份)

新手村 任何一个伟大的目标,都有一个微不足道的开始。 洛谷的第一个任务 勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。 P1000 P1001 P1421 P1425 顺序与分支 计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。 P1422 P1085 P1089 P1909 循环!循环!循环! 计算机最不怕的就是重复。你让它做10000次同样的事它也不怕啦,但是让他做1亿亿次的话…… P1008 P1035 P1423 P1424 P1980 数组 跟数组有关

繁凡さん的博客 4303

P1316 丢瓶盖-二分答案

P1316 丢瓶盖 题意:陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上。 现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 思路:嗯....明显的最小值最大问题,二分就ok了 #include&lt;bits/stdc++.h&gt; using namespace std; #define ll ...

BePosit的博客 659

采购订单定价策略 超详细

‘需求’字段里填写的是一个例程编号(例程是一段判断程序),如果我们在需求中维护了例程编号,那只有这个例程条件被满足时,这个条件表才会被系统自动读取。一部分的条件表只有在凭证项目满足一定的条件时才会被读取。 ‘排斥的’字段如果别勾中的话,那表明如果这个条件表被系统成功读取到数据后,系统将停止这个存取顺序的执行,否则,系统将继续执行下去。 注意:a、如果我们给某个条件类型设定了有效期的话,那我们必须给这个条件类型分配一个存取顺序。 b、不能给一个抬头条件分配存取顺序。 是...

竹大的博客 1万+

洛谷-1316 丢瓶盖

题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出格式 输入格式: 第一行,两个整数,A,B。(B<=A<=100000) 第二行,A个整数,分别为这A个瓶盖坐标。 输出格式: 仅一个整数,为所求答案。 输入输出样例 输入样例#1:...

mkopvec的博客 297

ISO26262 功能安全各个阶段测试要求

1. 开发过程说明 系统层面:包括软硬件集成测试、系统集成测试以及整车测试。 硬件层面:包括硬件集成与测试。 软件层面:单元测试、集成测试。 2. 功能安全总体要求 2.1 各项指标 2.2 诊断覆盖度举例 针对一个信号举例说明: 3. 功能安全测试要求 3.1 测试计划 核心内容应包括, 测试对象:需要测试的对象描述,以及测试的范围描...

AgingMoon的博客 1万+

Rockchip RK3566 Buildroot SDK构建与内核编译实战指南

嵌入式Linux开发中,交叉编译环境是系统启动的基础支撑。Buildroot作为轻量级嵌入式构建框架,通过配置驱动、自动化下载和分层编译机制,显著降低定制化Linux发行版的集成门槛。其核心价值在于将内核、根文件系统与工具链统一管理,兼顾资源约束下的确定性构建与工程可复现性。典型应用场景涵盖ARM64平台(如RK3566)的固件开发、IoT设备量产镜像生成及硬件Bring-up阶段的快速验证。本文围绕Buildroot SDK全流程实践,深入解析环境搭建、Repo源码同步、离线DL库预置及内核编译等关键环节

weixin_36047538的博客 136

丢瓶盖---二分

题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出格式 输入格式:   第一行,两个整数,A,B。(B&lt;=A&lt;=100000) 第二行,A个整数,分别为这A个瓶盖坐标。   输出格式:   仅一个整数,为所求答案。 ...

scwMason的博客 564

用 RFC Destination 打通 VS Code 与 ABAP 后端,ABAP 开发连接不只是登录那么简单

本文重点介绍了在VS Code中配置ABAP开发环境时建立RFC destination连接的关键细节。文章指出:1. RFC destination是连接前端开发工具与ABAP后端的核心配置,包含系统类型、客户端、用户名等关键信息;2. 连接方式的选择(RFC/HTTP)由产品形态决定,On-Premise和Private Edition使用RFC,而BTP和Public Cloud使用HTTP;3. 连接创建后需要通过添加工作区文件夹来展示开发对象;4. RFC连接涉及网络可达性、身份认证和开发权限三个

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 213

递推与递归二分的简单入门题

前言 参考视频教程洛谷试练场 普及组 递推与递归二分 重在找规律 以简单基础普及题型为例,可在洛谷上查找题目提交,代码仅供参考。 题目列表: 1.P1192 台阶问题 2.P1025 [NOIP2001 提高组] 数的划分 3.P1057 [NOIP2008 普及组] 传球游戏 4.P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles 1.P1192 台阶问题 题目描述 有NN级的台阶,你一开始在底部,每次可以向上迈最多KK级台阶(最少11级),问到达第NN级台阶有

手撕鸡翅的博客 275

【系统分析师】2026年上半年真题:论文及解题思路

四篇论文围绕系统与开发实践展开: 安全架构设计强调数据加密(国密算法)、零信任访问控制及容灾架构,以某医疗云平台为例,实现RTO<5分钟的高可用保障。 架构风格应用解析微服务/事件驱动等风格选型,结合电商平台案例,通过服务拆分与异步通信提升扩展性。 需求评审机制提出正式评审与走查结合的方法,在金融系统中减少30%返工,解决业务规则二义性问题。 LLM测试生成利用大模型从需求/代码生成用例,辅以人工校验,使测试效率提升50%,覆盖边缘场景。 各篇均遵循“背景-理论-实践”结构,突出

数据知道的博客 783

21天教你学会PCIe专栏(17)--多功能设备

1.1 定义多功能PCIe设备:多功能PCIe设备是指在一个物理设备中集成了多种功能的设备。这些功能可以通过不同的PCIe功能(Function)来实现,每个功能可以独立配置和管理。1.2 优点资源利用率:通过集成多种功能,减少物理设备的数量,提高资源利用率。成本效益:减少硬件成本和功耗,提高系统的经济性。灵活性:用户可以根据需要启用或禁用不同的功能,提高系统的灵活性。可扩展性:通过增加新的功能,扩展设备的功能,提高系统的可扩展性。1.3 应用场景网络设备。

xiaoheshang_123的博客 531

基于数列递推与二分查找解决洛谷P2669 [NOIP 2015 普及组] 金币

基于数列递推与二分查找解决洛谷P2669 [NOIP 2015 普及组] 金币

2502_90454521的博客 617

ESP32开发进阶:1.接入文心一言

ESP32开发进阶:接入文心一言大模型,串口对话

qq_53529450的博客 1431

位运算、递推与递归、前缀和、差分、二分

位运算、递推与递归、前缀和、差分、二分

AC__dream的博客 708

openbmc 支持mctp over pcie(三)(支持作为endpoint)

本文介绍了在Intel BHS平台上支持MCTP over PCIe端点开发的调试方法。开发基于CodeConstruct和AspeedTech-BMC的开源项目,将内核驱动改为模块形式以便调试。内容包括DTS配置、驱动模块设置步骤,以及如何将BMC配置为端点设备。调试过程涉及内核模块加载、MCTPD启动、参数设置等关键命令,并展示了路由表、地址和邻居信息的测试结果。该方案仅为实验性工作,需注意停止其他使用/dev/aspeed-mctp0接口的应用。

wit_yuan的专栏 1557

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

洛谷 2-12递推递归二分

台阶问题 n,k 台阶每次最多可以跨k层,最少1层,问到第n个台阶的方案数 很明显,到第n个台阶的方案数,就是到前面所有的n-k个台阶的 方案数之和。 题目有要求取模,那就每次求得并取模。 复杂度 nk,题目数据 n≤100000,K≤100,还可以凑合 #include&lt;bits/stdc++.h&gt; using namespace std; const int MOD=100003;...

weixin_42091898的博客 254

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

洛谷试炼场------题目

新手村 任何一个伟大的目标,都有一个微不足道的开始。 洛谷的第一个任务 勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。 P1000 P1001 P1421 P1425 顺序与分支 计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。 P1422 P1085 P1089 P1909 循环!循环!循环! 计算机最不怕的就是重复。你让它做10000...

mrcrack的博客 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【c/c++算法刷题笔记】—— 洛谷打卡1.7 递归与递推二分

【前言】今天为了熟悉上机环境,针对递推与递归二分专项练习。OJ:洛谷 1 P1192 台阶问题 题目描述 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第NN级台阶有多少种不同方式。 输入格式 两个正整数N,K。 输出格式 一个正整数,为不同方式数,由于答案可能很大,你需要输出ans mod 100003后的结果。 样例 输入 #1复制 5 2 输出 #1复制 8 笔...

Paul 的笔记库 784

洛谷 3938 [NOIP模拟] 斐波那契 二分+找规律

GG

Loi_cgold 311

洛谷试炼场——题目单

洛谷试炼场已关闭,大家看看这个吧 新手村 任何一个伟大的目标,都有一个微不足道的开始。 洛谷的第一个任务 勇敢的迈出第一步,了解下语言和洛谷。跟着书本和老师走,不会难的。 P1000 P1001 P1421 P1425 顺序与分支 计算机的智能性开始得以体现,因为计算机能够根据不同的条件选择了。 P1422 P1085 P1089 P1909 循环!循环!循环! 计算机最不怕的就是重复。你让它做10000次同样的事它也不怕啦,但是让他做1亿亿次的话…… P1008 P1035 P1423 P1424 P19

Tonvia的博客 2166

递推与递归二分——台阶问题

洛谷 P1192 台阶问题 题目描述 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。 输出mod 100003后的结果分析 与数楼梯问题几乎雷同,于是我们可以看出来:数楼梯问题其实数列还是11235,但是开头那个1放第0位(然而用不上),在这里可以用上了。 若是这样的数组情况(第一排是值,第二排下标) 1 1 2 3 5 8 13

~NULL~ 1180

二分查找的简单实现

二分查找的实现 二分查找可以由递归和递推实现 由递推实现: int erfen(int a[],int traget,int n){ int left=0,right=n-1; while(left<=right){ //带=号是left+1=right,不带是left=right int mid=(left+right)/2; //而是用 mid=low+((high-low)/2),原因是 //使用(low+

nobugnomoney的博客 814

【洛谷P1485 火枪打怪】

题目描述 LXL 进入到了一片丛林,结果他发现有 nn 只怪物排成一排站在他面前。LXL 有一杆火枪能对付这些怪物。他知道从左至右数第 ii 只怪物的血量是 mi。现在 LXL 可以将一些子弹射向某个怪物。LXL 可以控制他所发射的子弹数量及子弹的威力值。当某个子弹射到第 ii 个怪物,如果这个子弹的威力值为 pp,除了这个怪物会掉 pp 点血以外,它左边的第 jj 个怪物 (j<ij<i),也会遭到 \max(0, p - (i - j)^2)max(0,p−(i−j) 2 ) 的溅射伤害(好

qq_36213882的博客 567

洛谷 1057——台阶问题(递推与递归二分)

题目描述有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式。输入输出格式输入格式: 输入文件的仅包含两个正整数N,K。输出格式: 输入文件stair.out仅包括1个正整数,为不同方式数,由于答案可能很大,你需要输出mod 100003后的结果。输入输出样例输入样例#1: 5 2 输出样例#1: 8 说明对于20%的数据,有N ≤ 10

OIer 886

一个动态更新的洛谷综合题单(原版)

洛谷试炼场的题目确实很具有代表性,但是近几年以来,又有许多经典题目出现在 OI 界中,这个大题单就是作为洛谷试炼场的扩展和补充。

yfdai8的专栏 2411

分治/二分/递推

洛谷p1057传球游戏 (看到什么都像dp的毛病得改) #include using namespace std; int a[40][40]={0},n,m,l,r; int main() { scanf("%d%d",&n,&m); a[0][1]=1; for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) { l=j-1>0?j-1:n;

s223568907的博客 309
上一篇: c/c++基础操作学习 memset函数用法
下一篇: [论文笔记]Visualizing and Understanding Convolutional Networks
_陈麒_
博客等级 码龄9年 40粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值