Sticks POJ 1011

news2024/10/1 5:36:59

题目链接:1011 -- Sticks

题目描述:

评注: 好暴力的一个题,就当锻炼自己的搜索技巧了,本题中的一些剪枝技巧还蛮有意思的,可以品味一下

思路: 枚举+深搜+剪枝

看完题面,其实感觉没啥特别巧妙的性质,而且数据范围比较小,因此可以试一试深搜+剪枝.

假设当前考虑长度为L的划分是否可行,所有数之和=tot, 那么原始就有k=tot/L 这么多根棒子

定义dfs状态为: dfs(int cur, int rest, int sta), 含义为: 当前我想拼凑到原始k根棒子中的第cur个棒子了,且这个第k个棒子还剩下rest的长度需要拼凑,且下标在1~sta-1这部分的棒子我都已经考虑过了,这样的情况下,是否可以得到可行解.

tips: 这里可以用这个sta 来减小枚举范围是因为,我现在就想要拼凑出原始的第k个棒子, 而1~sta-1这一部分中的棒子已经被遍历过了,如果他们可以用在当前状态下的可行解中,那么就不会枚举到我现在这个状态,而是在之前的状态就已经枚举成功了。因此,我枚举到现在这个状态,说明1~sta-1中的棒子要么已经被使用了,要么就永远不会用于拼凑第k个棒子. 

(1) 将数组从大到小进行排序,从大到小进行枚举

(2) 如果当前位置a[i] 无法得到可行解,那么所有后面a[j]==a[i]的下标j也都不用枚举了,也不可能得到可行解

(3) 如果当前rest=0, 那么说明要准备拼凑下一个棒子了,此时需要从下标为1的位置重新考虑. 并且,如果要得到可行解,那么就一定要使用当前剩余的棒子中的最长棒子(因为最长的这个棒子一定要在某一时刻被使用,而且现在是要拼凑一个新棒子,那么就不妨一定要使用这个最长的棒子)

参考代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=70;
int n;
int a[N];
int vis[N];
int tot;
int flag=0;
int l,k;
int maxnum;
bool cmp(int x,int y){
	return x>y;
}
void dfs(int cur,int rest,int sta){
	//cout << cur << "---" <<rest <<"---" <<sta << endl;
	if(flag) return ;
	if(cur==k+1){
		flag=1;
		return ;
	}
	if(rest==0){
		//dfs(cur+1,l,1);
		if(cur==k){
			flag=1;
			return ;
		}
		for(int i=1;i<=n;i++) {
			if(vis[i]) continue;
			vis[i]=1;
			dfs(cur+1,l-a[i],i+1);	
 			vis[i]=0;
			return ;
		}
		return ;
	}
	
	for(int i=sta;i<=n;i++){
		if(flag) return ;
		if(vis[i]) continue;
		if(a[i]>rest) continue;
		vis[i]=1;
		dfs(cur,rest-a[i],i+1);
		vis[i]=0;
		int ind=i+1;
		while(ind<=n&&a[ind]==a[i]) ind++;
		i=ind-1;
	}
	return ;
}
int main(void){
	
	while(scanf("%d",&n)!=-1){
		if(n==0) break;
		tot=0;
		flag=0;
		maxnum=0;
		for(int i=1;i<=n;i++) {
		scanf("%d",&a[i]);	
		tot+=a[i];
		maxnum=max(maxnum,a[i]);
		}
		memset(vis,0,sizeof(vis));
		sort(a+1,a+1+n,cmp);
		int ans=tot;
		for(int i=maxnum;i<=(tot/2);i++){
			if(tot%i) continue;
			l=i;
			k=tot/i;
			dfs(1,l,1);
			if(flag){
				ans=i;
				break;
			} 
		}
		printf("%d\n",ans);
	}
	
	return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1540510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双指针(滑动窗口)-算法刷题

一.移动零&#xff08;. - 力扣&#xff08;LeetCode&#xff09;&#xff09; 算法思想 &#xff1a; 设置两个指针left,right&#xff0c;将数组分为三块[0,left]为不为0的元素&#xff0c;[left1,right-1]为0元素&#xff0c;[right,num.size()-1]为未扫描的区域&#xff0c…

【动态规划】Leetcode 746. 使用最小花费爬楼梯

【动态规划】Leetcode 746. 使用最小花费爬楼梯 解法 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法 &#x1f612;: 我的代码实现> 动规五部曲 ✒️确定dp数组以及下标的含义 dp[i] 表示跳跃到第 i 层&#x…

10一维数组

一维数组是什么&#xff1f; // 相同的数据类型的元素组成的有序集合 // 创建一个一维数组 // 例如&#xff1a; int a[5]{1,2,3,4,5}; //说明&#xff1a; // int:表示数据类型 // a:表示数组名 // [5]&#xff1a;数组的长度 // {1,2,3,4,5} &#xff1a;数组的元素 // 一…

适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;设计模式深度解析&#xff1a;适配器模式与桥接模式-灵活应对变…

SSD268G系列高性价比DIS CAM方案

技术详情 星宸科技&#xff08;Sigmastar&#xff09;高端智能显示芯片SSD268G&#xff0c;适用于高分辨率的视频录制和播放应用。作为一款高集成度&#xff0c;多功能的高性能处理器&#xff0c;其内置ARM Cortex-A53双核64位处理器&#xff0c;最高工作主频为1.2GHz&#xf…

下载安装anaconda和pytorch的详细方法,以及遇到的问题和解决办法

下载安装Anaconda 首先需要下载Anaconda&#xff0c;可以到官网Anaconda官网或者这里提供一个镜像网站去下载anaconda镜像网站 安装步骤可参考该文章&#xff1a;Anaconda安装步骤&#xff0c;本篇不再赘述 注意环境变量的配置&#xff0c;安装好Anaconda之后一定要在环境变量…

初始Java篇(JavaSE基础语法)(2)(逻辑控制)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 逻辑控制 顺序结构 分支结构 if语句 switch 语句 循环结构 while 循环 for 循环 do while 循环 输入输出 输出到控制台 从键盘输入 …

<REAL-TIME TRAFFIC OBJECT DETCTION FOR AUTONOMOUS DRIVING>论文阅读

Abstract 随着计算机视觉的最新进展&#xff0c;自动驾驶迟早成为现代社会的一部分&#xff0c;然而&#xff0c;仍有大量的问题需要解决。尽管现代计算机视觉技术展现了优越的性能&#xff0c;他们倾向于将精度优先于效率&#xff0c;这是实时应用的一个重要方面。大型目标检测…

使用git+ssh访问github,避免下载资源失败

一、创建github账户之后&#xff0c;记住注册邮箱和账户名 我的邮箱&#xff1a;yuanyan23mails.ucas.ac.cn 账户名&#xff1a;thekingofjumpshoot 下边的相关位置需要用自己的邮箱和用户名替代 二、输入本地生成秘钥和公钥命令&#xff0c;并且生成公私钥对 ssh-keygen …

WooCommerce Appointments: 建立会话或预订类型网站的详细教程- US Domain Center主机

第一步&#xff1a;了解会话或预订类型网站 会话或预订类型网站是一种让用户可以预订会议、咨询、活动或其他服务的网站。这种类型的网站通常使用预订插件来管理日程安排、接受预订、处理付款等功能。 第二步&#xff1a;注册 US Domain Center 账户 美国域名中心US Domain …

linux之centos7vmware虚拟机的安装

目录 一、下载合适的vmware和操作系统镜像安装文件 来自引用文章的软件下载本片文章使用的软件下载 二、根据教程进行安装 三、网络配置解说 四、配置网络 编辑虚拟机网络 对VMWARE虚拟机网络进行配置 设置虚拟机网络为NAT模式 设置自定义网络为 VMnet8(NAT模式) 编辑li…

【Linux】线程控制{fork() / vfork / clone/pthread_join()/pthread_cancel()}

文章目录 1.fork() / vfork / clone2.线程等待2.1pthread_join()2.2pthread_tryjoin_np() 3.pthread_exit()4.pthread_cancel()5.一些线程相关的问题6.pthread_detach()7.pthread_self()8.认识线程标识符&#xff1a;pthread_self()获取线程标识符9.POSIX线程库 1.fork() / vfo…

制作nuget包并上传到nuget.org

下面是一个详细的步骤指南&#xff0c;用于创建一个简单的 C# NuGet 包并将其发布到 NuGet.org。我们将创建一个简单的数学库作为示例。 步骤 1: 创建一个新的类库项目 首先&#xff0c;我们需要创建一个新的类库项目。这可以通过 Visual Studio 或者 .NET CLI 完成。 使用 …

MAC IntelliJ IDEA搭建Doris Fe

目录 版本信息 安装环境依赖 拉取源码 下载 Doris 编译依赖 修改系统最大文件句柄数 编译 Doris 配置 Debug 环境 生成 FE 代码 FE模块代码导入 配置 Debug FE 启动 FE 报错问题 版本信息 本次安装的doris版本信息为doris-2.1.0-rc11 IntelliJ IDEA 配置jdk17、m…

Docker 镜像仓库

目录 1、搭建私有 registry 服务端创建镜像仓库 客户端推送镜像 镜像导入导出 2、Nginx 代理 registry 仓库 SSL 证书 & https 协议 SSL证书 https协议 SSL 的验证流程 客户端安装 Nginx 使用 openssl 生成CA根证书和根证书key 创建 Nginx 服务证书 配置启动 N…

哈希表(c++)

1、介绍 哈希表&#xff0c;也称为散列表&#xff0c;是一种非常高效的数据结构。它通过将键&#xff08;Key&#xff09;映射到数组的特定位置来快速查找、插入和删除数据。这个映射过程由哈希函数&#xff08;Hash Function&#xff09;完成&#xff0c;该函数将键转化为一个…

基于Springboot的牙科就诊管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的牙科就诊管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍: 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c…

unity编辑器扩展高级用法

在PropertyDrawer中&#xff0c;您不能使用来自GUILayout或EditorGUILayout的自动布局API&#xff0c;而只能使用来自GUI和EditorGUI的绝对Rect API始终传递相应的起始位置和维度。 你需要 计算显示嵌套内容所需的总高度将此高度添加到public override float GetPropertyHeig…

P6维护:P6 数据库迁移Step by Step

前言 根据大家的近期给的提议&#xff0c;这里简单介绍如何迁移P6数据库&#xff0c;场景选取为从将P6从ORACLE迁移到SQLServer。 Oracle Primavera P6 PPM 以及 EPPM 均有其自带的migrate工具完成数据库迁移&#xff0c;整个操作也较为傻瓜式&#xff0c;只要有基本的数据库…

[MAUI]集成高德地图组件至.NET MAUI Blazor项目

文章目录 前期准备&#xff1a;注册高德开发者并创建 key登录控制台创建 key获取 key 和密钥 创建项目创建JS API Loader配置权限创建定义创建模型创建地图组件创建交互逻辑 项目地址 地图组件在手机App中常用地理相关业务&#xff0c;如查看线下门店&#xff0c;设置导航&…