dfs解决选或不选问题
目录
- 92. 递归实现指数型枚举
- 神奇的口袋
- 01背包问题
在做题的时候,有的问题就是问你这个东西选或不选的问题。专业说法叫做01背包。
我个人觉的叫选不选问题更能通速易懂。
92. 递归实现指数型枚举
https://www.acwing.com/problem/content/94/
这就是一个典型的选或不选问题。
对于每一个数我们可以选,也可以不选。
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int n;
const int max=20;
int a[20];//用这个数来记录一下我们对于每个数的状态
// 0代表未处理 1代表选 2代表不选
void dfs(int u)//代表当前选的数是第几个(从下标0开始)
{if(u==n){for(int i=0;i<n;i++){if(a[i]==1){printf("%d ",i+1);}} printf("\n");return;}a[u]=1;//选这个数dfs(u+1);a[u]=0;//恢复现场a[u]=2;//不选这个数dfs(u+1);a[u]=0;//恢复现场
}
int main(void)
{cin>>n;dfs(0);
}
神奇的口袋
http://codeup.cn/problem.php?cid=100000583&pid=2
这其实也是一个选或者不选的问题。不过加了一点的限制。
要保证体积和为40。
#include<cstdio>
#include<iostream>
using namespace std;
int V=40;
int n;
int a[1005];
int ans=0;
void dfs(int index,int v)//index 当前的第几个物品的判断选不选(从0开始的) v当前的体积
{if(index==n){if(v==40)ans++;return;}dfs(index+1,v);//不选 dfs(index+1,v+a[index]);//选
}
int main(void)
{while(cin>>n){ for(int i=0;i<n;i++){scanf("%d",&a[i]);} dfs(0,0);printf("%d\n",ans);ans=0;}return 0;
}
01背包问题
这也是选不选的问题,不过是在各种情况中选择价值最大的。
当然本题用dfs()解决是不可以的。因为n的最大值可以为1000那么时间复杂度为21000太大了。
不过本文主要是讲的dfs()的思想。所以列了出来。对于这种数据量大的情况还是用动态规划解决方便。
#include<cstdio>
#include<cstring>
#include<iostream>
#define max 10005
using namespace std;
int n,V;
int w_arr[max];
int v_arr[max];
int M=-1;//保存最大的
void dfs(int index,int v,int w)//v 代表当前的体积 w代表当前的价值
{if(index==n) {if(v<=V){if(w>M){M=w;}}return;}dfs(index+1,v,w);//不选 if(v_arr[index]+v<=V)dfs(index+1,v_arr[index]+v,w_arr[index]+w);//选
}
int main(void)
{cin>>n>>V;for(int i=0;i<n;i++){scanf("%d %d",&v_arr[i],&w_arr[i]);}dfs(0,0,0);printf("%d\n",M);return 0;
}
dfs解决选或不选问题相关推荐
- Android之自定义checkbox并解决内容和复选框之间的具体问题
1.问题 checkbox自定义并解决内容和复选框之间的具体问题 2.代码实现 1.select_checkbox.xml文件 <?xml version="1.0" enc ...
- DevExpress XtraGrid RepositoryItemCheckEdit 复选框多选的解决方法(转)
DevExpress XtraGrid RepositoryItemCheckEdit 复选框多选的解决方法(转) 参考文章: (1)DevExpress XtraGrid RepositoryIte ...
- 【已解决】华硕天选rtx2060安装Ubuntu20黑屏问题
[已解决]华硕天选rtx2060安装Ubuntu20黑屏问题 问题描述 如何解决 解决方案 问题描述 想把华硕天选自带的win10系统更换为Ubuntu20,前面几乎很正常.问题出在安装后第一次重启后 ...
- Vue3 - Element plus 实现 “带分页“ 表格组件,实现跨页进行 “分页勾选“ 的多选功能(解决分页表格组件 <el-table> 跨页后已前勾选的行自动消失问题)详细示例解决教程
前言 在 Vue3 项目中,使用 Element Plus 组件库的表格组件时,出现了跨页勾选复选框消失的问题. 本文实现了 vue3 中 element plus 表格组件 <el-table ...
- 【已解决】lol盲选局是什么?
lol盲选模式是什么 在lol战队比赛中,会出现2比2平的情况,那么这样会出现下一盘盲选的情况,按理讲应该是10个玩家都随机点英雄,为什么在"韩国龙争虎斗怀"中,解说的那两个人,其 ...
- jquery高版本全选与全部选无法正常工作
jquery执行全选/全不选的操作 <script type="text/javascript"> $(function(){ $('#checkAll').click ...
- JQuery中checkbox勾选/取消勾选的诡异问题(attr和prop)
#1.使用attr()实现勾选的问题 //HTML伪代码 <form>你爱好的运动是?<input type="checkbox" id="Checke ...
- 【前端2】js:原始类型,运算符,调试,页面加载,轮播图,Bom(对象,时钟),Dom(全选全不选,省市级联,隔行/触摸换色,表单校验)
文章目录 1.js两种引入:js最终要引入到html在浏览器中运行 2.js五大原始类型:undefined 3.js的运算符和流程控制:js不支持单&和单|性能低 4.案例_99乘法表:So ...
- 【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错
原文网址:http://blog.csdn.net/onlyonecoder/article/details/8687811 Demo地址(0分资源):http://download.csdn.net ...
最新文章
- Python学习笔记-进度条
- 《重构-改善既有代码设计》读书笔记-重构篇
- 论文阅读:Joint Learning of Single-image and Cross-image Representations for Person Re-identification
- Acwing第 29 场周赛【完结】
- 单片机光敏电阻控制蜂鸣器_走进单片机|第七期:湿度检测
- linux远程执行本地脚本,ssh远程执行命令方法和Shell脚本实例
- JavaScript权威指南--客户端存储
- Vue之旅-Vue环境搭建
- 三十四、Scrapy中的CrawlSpider
- Android DDMS位置
- HTML自动换行的问题
- spring连接mysql出现问题_使用spring连接mysql数据库出错
- Z表数据EXCEL导入
- lambda捕获this_非捕获Lambda的实例
- MVC中跳转到其他页面,并传参数
- axure实现搜索功能_vue实现模糊搜索功能
- spring boot----简单入门
- 数据可视化建设是企业战略决策之刚需
- mfc之解决vs2010调试监视器(MSVSMON.EXE)未能启动的问题
- 清华大学2017计算机录取分数线,2017年清华大学录取分数线