CJOJ 2022 【一本通】简单的背包问题(搜索)
CJOJ 2022 【一本通】简单的背包问题(搜索)
Description
设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。 问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S。
如果有满足条件的选择,则此背包有解,并输出解。(若有多组解,输出最先找到的一组解即可)
Input
第一行物品重量为s,物品的件数n
第二行每件物品的重量(输入数据均为正整数)
Output
输出物品的序号和重量
Sample Input
5 10
1 2 3 4 5
Sample Output
number:1 wieght:1
number:4 wieght:4
number:5 wieght:5
Http
CJOJ:http://oj.changjun.com.cn/problem/detail/pid/2022
Source
递归,搜索
解决思路
简单的dfs,每次判断某个物品选或不选,注意输出顺序
不要看到背包问题就想到动归
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxN=5000;
const int inf=2147483647;
int n,S;
int Weight[maxN];
vector<int> Arr;
void dfs(int x,int sum);
int main()
{
	Arr.clear();
	cin>>n>>S;
	for (int i=1;i<=n;i++)
		cin>>Weight[i];
	dfs(n,0);
	cout<<"not found"<<endl;
	return 0;
}
void dfs(int x,int sum)
{
	/*cout<<x<<' '<<sum<<endl;
	for (int i=0;i<Arr.size();i++)
		cout<<Arr[i]<<' ';
	cout<<endl<<endl;
	*/
	if (x==0)
		return;
	if (Weight[x]+sum<=S)
	{
		Arr.push_back(x);
		if (Weight[x]+sum==S)
		{
			for (int i=Arr.size()-1;i>=0;i--)
				printf("number:%d weight:%d\n",Arr[i],Weight[Arr[i]]);
			exit(0);
		}
		dfs(x-1,Weight[x]+sum);
		Arr.pop_back();
	}
	dfs(x-1,sum);
	return;
}
												
											CJOJ 2022 【一本通】简单的背包问题(搜索)的更多相关文章
- python--selenium简单模拟百度搜索点击器
		
python--selenium简单模拟百度搜索点击器 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: selenium 模拟 简单 点击 搜索 百度 发表文章摘要:用途:简单模拟 ...
 - xpath教程一---简单的标签搜索
		
工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自己杜撰一个] requests[推荐安装,从网页上获取网页代码练手,再好不过了] 讲解 网页代码都是成对的标签, ...
 - 【动态规划】【C/C++】简单的背包问题
		
简单的背包问题 背包问题动态规划中非常经典的一个问题,本文只包含01背包,完全背包和多重背包.更加详尽的背包问题的讲解请参考崔添翼大神的<背包九讲> 简单的01背包 问题导入:新年到了,m ...
 - 简单的背包问题(入门)HDU2602 HDU2546 HDU1864
		
动态规划,我一直都不熟悉,因为体量不够,所以今天开始努力地学习学习. 当然背包从01开始,先选择了一个简单的经典的背包HDU2602. Many years ago , in Teddy's home ...
 - 简单搜索dfs, 简单的修剪搜索
		
选择最合适的语言做一个项目是非常重要的.但,熟练的掌握自己的武器,这也是非常重要的. ========================================================= ...
 - MapReduce 简单的全文搜索2
		
上一个全文搜索实现了模糊查找,这个主要实现了精确查找,就是比如你查找mapreduce is simple那么他就只查找有这个句子的文章,而不是查找有这三个单词的文章. 这个版本需要重写反向索引,因为 ...
 - ElasticSearch(五):简单的ElasticSearch搜索功能
		
这里主要是一些简单的ElasticSearch的搜索功能,复杂的搜索,比如过滤,聚合等以后单独在写 1. 搜索全部 GET book/_search 直接搜索全部,下面是对搜索结果的详细介绍:默认情况 ...
 - Android 百度地图 简单实现---  美食搜索
		
Android 百度地图 简单实现--- 美食 依赖包: 加入 Android 百度依赖包: 1 key: <!-- 开发人员 key --> <meta-dat ...
 - hdu 1078 FatMouse and Cheese(简单记忆化搜索)
		
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意:给出n*n的格子,每个各自里面有些食物,问一只老鼠每次走最多k步所能吃到的最多的食物 一道 ...
 
随机推荐
- python 字典的常见操作
			
字典 字典的增删改查 字典的创建方式: # 创建字典类型 info = { 'name':'李白', ', 'sex':'男' } msg = { 'user01':'Longzeluola', 'u ...
 - Python教程(1.2)——Python交互模式
			
上一节已经说过,安装完Python,在命令行输入"python"之后,如果成功,会得到类似于下面的窗口: 可以看到,结尾有3个>符号(>>>).>&g ...
 - JavaSE教程-02Java基本语法-BUG:易错点
			
1.区别文档注释和多行注释 多行注释:多一个* 多行注释 格式: /* 注释文字 */ 文档注释 格式:/** 注释文字 */ 2.有关变量名.类名.方法名等注意点 由字母.数字.下划线.$组成,但不 ...
 - Java IO流之打印流与标准流
			
一.打印流 1.1打印流特点与构造方法 1)PrintStream和PrintWriter类都提供了一系列重载的print和println方法来输出各种类型的数据. 2)PrintStream和Pri ...
 - 利用npm安装/删除/发布/更新/撤销发布包 --社会我npm哥,好用话不多
			
一.什么是npm? npm是javascript的包管理工具,是前端模块化下的一个标志性产物 简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率 1.从社区的角度:把针对某一特定 ...
 - 基于redis实现tomcat8及以上版本的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)
			
前言: 本项目是基于jcoleman的tomcat-redis-session-manager二次开发版本 1.修改了小部分实现逻辑 2.去除对juni.jar包的依赖 3.去除无效代码和老版本tom ...
 - iOS开发之常用资讯类App的分类展示与编辑的完整案例实现(Swift版)
			
上篇博客我们聊了<资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0)>,今天的这篇博客就在上篇博客的基础上做些东西.做一个完整的资讯类App中的分类展示 ...
 - 单机部署 kubernets 方法汇总
			
#minikube : 可以方便的在本机用虚拟机创建一个开箱即用的Kubernetes集群 #kubeadm : 可以自动化的将多台Ubuntu或者CentOS主机组建成集群 #nanokube,ki ...
 - ecshop获取商品销量函数
			
以下函数会获取订单状态为已完成的订单中该商品的销量,此函数放在lib_goods.php文件中即可调用 /** * 获取商品销量 * * @access public * @param ...
 - [USACO07NOV]电话线Telephone Wire
			
[USACO07NOV]电话线Telephone Wire 时间限制: 1 Sec 内存限制: 128 MB 题目描述 电信公司要更换某个城市的网线.新网线架设在原有的 N(2 <= N &l ...