dfs深搜
一.01背包dfs
//回溯法,01背包
#include<iostream>
#include<algorithm>
using namespace std;
const int N=10;
int n,C;
int v[N],W[N];
double bestp;//当前最优值
double cw;
double cp;
int bestx[N];
int x[N];
typedef struct obj{
int w;
int v;
};
obj objt[N];
bool cmp(const obj a,const obj b)
{
return a.v/a.w>b.v/b.w;
}
int upbound(int i)//求i到后面n能装入的最大值
{
double cleft=C-cw;
double brp=0.0;
while(i<=n&&objt[i].w<cleft)
{
cleft-=objt[i].w;
brp+=objt[i].v;
i++;
}
if(i<=n)
{
brp+=cleft*(objt[i].v/objt[i].w);
}
return cp+brp;
}
void dfs(int t)
{
if(t>n)//到达叶子节点 ,也就说明已经存在了一条路径
{
for(int j=1;j<=n;j++)
{
bestx[j]=x[j];
}
bestp=cp;//保存当前最大价值
return ;
}
if(cw+objt[t].w<=C)//如果满足条件,装入,走左分支
{
x[t]=1;
cw+=objt[t].w;
cp+=objt[t].v;
dfs(t+1);//往下扩展
cw-=objt[t].w;//回溯
cp-=objt[t].v;
}
if(upbound(t+1)>bestp)//不满足条件则判断是否可能构成最优解
{
x[t]=0;
dfs(t+1);//往下扩展
}
}
int main()
{
cin>>n>>C;
for(int i=1;i<=n;i++)
{
cin>>objt[i].w>>objt[i].v;
}
sort(objt+1,objt+n+1,cmp);
dfs(1);
cout<<bestp<<endl;
cout<<"装入的价值分别是"<<endl;
for(int i=1;i<=n;i++)
{
if(bestx[i]==1)
{
cout<<objt[i].v<<' ';
}
}
return 0;
}
二.最大团问题
若一个图的每一对不同顶点恰有一条边相连,则称为完全图。完全图是每对顶点之间都恰连有一条边的简单图。n个端点的完全图有n个端点及n(n − 1) / 2条边,以Kn表示。它是(k − 1)-正则图。所有完全图都是它本身的团(clique)。
dfs深搜的更多相关文章
- CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】
[编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色 ...
- DFS 深搜专题 入门典例 -- 凌宸1642
DFS 深搜专题 入门典例 -- 凌宸1642 深度优先搜索 是一种 枚举所有完整路径以遍历所有情况的搜索方法 ,使用 递归 可以很好的实现 深度优先搜索. 1 最大价值 题目描述 有 n 件物品 ...
- 【DFS深搜初步】HDOJ-2952 Counting Sheep、NYOJ-27 水池数目
[题目链接:HDOJ-2952] Counting Sheep Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- DFS深搜——Red and Black——A Knight's Journey
深搜,从一点向各处搜找到全部能走的地方. Problem Description There is a rectangular room, covered with square tiles. Eac ...
- Red and Black(DFS深搜实现)
Description There is a rectangular room, covered with square tiles. Each tile is colored either red ...
- poj 2386:Lake Counting(简单DFS深搜)
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18201 Accepted: 9192 De ...
- UVA 165 Stamps (DFS深搜回溯)
Stamps The government of Nova Mareterrania requires that various legal documents have stamps attac ...
- CCF 模拟E DFS深搜
http://115.28.138.223:81/view.page?opid=5 这道题问的很怪. 起点DFS,每一个点还要DFS一次,统计不能到终点的个数 数据量不大这样做也能AC #includ ...
- HDU_1241 Oil Deposits(DFS深搜)
Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground ...
- 解救小哈——dfs深搜
问题描述: 小哈去玩迷宫,结果迷路了,小哼去救小哈.迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物. 问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径 ...
随机推荐
- 如何使用双重检查锁定在 Java 中创建线程安全的单例?
这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它.好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个线程试图同时创建 Singleton 实 ...
- 使用Pycharm获取Resources目录里的内容
def get_resource_path(path: str) -> str: """\ 获取Resources目录里的资源 :param path: :retu ...
- 怎么将 byte 转换为 String?
可以使用 String 接收 byte[] 参数的构造器来进行转换,需要注意的点是要使用 的正确的编码,否则会使用平台默认编码,这个编码可能跟原来的编码相同,也 可能不同.
- HTML 5中不同的新表单元素类型是什么?
HTML 5推出了10个重要的新的表单元素: Color. Date Datetime-local Email Time Url Range Telephone Number Search
- 学习GlusterFS(一)
一.概述 1.GlusterFS是集群式NAS存储系统,分布式文件系统(POSIX兼容),Tcp/Ip方式互联的一个并行的网络文件系统,通过原生 GlusterFS 协议访问数据,也可以通过 NFS/ ...
- ubuntu vmware kernel module updater
Ubuntu 19.04 - VMWare内核模块更新程序问问题 4 3我运行了这个命令: apt-cache search linux-headers-$(uname -r)它返回输出 linux- ...
- 《JavaScript Dom编程艺术》读书笔记(二)
算术操作符 加减乘除这些算术操作中的每一种都必须借助于相应的操作符才能完成.操作符是JavaScript为完成各种操作而定义的一些符号.等号(=).加号(+).减号(-).乘号(*).除号(/). 下 ...
- css创建叉和勾
a{ display: inline-block; width: 10px;height:5px; background: red;line-height: 0;font-size:0;vertica ...
- 深入HTTP协议
一.HTTP定义 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. HTTP是一个属于应用层的面向对象协议,由于其简捷.快速的方式, ...
- Checkstyle的安装与使用
两种安装方法: 方法一: 1.Eclipse中,选择Help->Software Updates->Find and Install 2.选择 Search for new feature ...