POJ2220+DFS
题意:给出n个宝物,m个寻宝人。
每个寻宝人对n个宝物都有一个估价。
从这些估价中挑出某些,是的价值差最小。
dfs。。没什么好说的,暴力枚举!
/*
搜索+枚举
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std; const int Max = 0x7fffffff;
struct Node{
int val[ ];
}a[ ];
struct Node2{
int num[ ];
int cnt ,sum ;
}ans[ ],dfs_ans[ ];
int vis[ ];
int diff;
bool flag[ ]; void init(){
diff = Max;
memset( flag,false,sizeof( flag ) );
//memset( vis,0,sizeof( vis ) );
for( int i=;i<;i++ ){
for( int j=;j<;j++ ){
//a[ i ].val[ j ] = 0;
ans[ i ].num[ j ] = dfs_ans[ i ].num[ j ] = ;
}
ans[ i ].cnt = ans[ i ].sum = dfs_ans[ i ].cnt = dfs_ans[ i ].sum = ;
}
} void init_vis( int n ){
int N = (<<n);
for( int i=;i<N;i++ ){
for( int j=;j<n;j++ ){
if( i&(<<j) ) vis[ j ] = ;
else vis[ j ] = ;
//printf("%d",vis[j]);
}
//printf("\n");
}
} void dfs( int cur_hunter,int cur_treasure,int num_treasure,int hunter ){
if( cur_hunter==hunter&&cur_treasure==num_treasure ){
int t_max = dfs_ans[].sum;
int t_min = dfs_ans[].sum;
for( int i=;i<hunter;i++ ){
t_max = max( t_max,dfs_ans[i].sum );
t_min = min( t_min,dfs_ans[i].sum );
}
if( t_max-t_min<diff ){
diff = t_max-t_min;
for( int i=;i<hunter;i++ )
ans[i] = dfs_ans[i];
}
return ;
}
if( cur_hunter>=hunter ) return ;
int N = (<<num_treasure);
for( int i=;i<N;i++ ){
int t_cnt = ;
bool p_flag = true;
for( int j=;j<num_treasure;j++ ){
if( i&(<<j) ) vis[ j ] = ;
else {
vis[ j ] = ;
t_cnt++;
if( flag[j]==true ) {
p_flag = false;
break;
}
}
}
if( /*t_cnt!=0&&*/p_flag==true&&( t_cnt+cur_treasure+hunter-cur_hunter- )<=num_treasure ){
int tt = ;
dfs_ans[ cur_hunter ].sum = ;
dfs_ans[ cur_hunter ].cnt = t_cnt;
for( int j=;j<num_treasure;j++ ){
if( vis[j] == ){
dfs_ans[ cur_hunter ].num[ tt++ ] = j;
flag[ j ] = true;
dfs_ans[ cur_hunter ].sum += a[ cur_hunter ].val[j];
}
}
dfs( cur_hunter+,cur_treasure+t_cnt,num_treasure,hunter);
for( int j=;j<tt;j++ ){
flag[ dfs_ans[ cur_hunter ].num[j] ] = false;
}
}
}
return ;
} int main(){
int num_treasure,hunter;
char s[ ];
int ca = ;
//freopen("out.txt","w",stdout);
while( scanf("%s",s)!=EOF ){
init();
scanf("%d%d",&num_treasure,&hunter);//宝藏,寻宝人
for( int i=;i<hunter;i++ ){
for( int j=;j<num_treasure;j++ ){
scanf("%d",&a[i].val[j]);
}
}
scanf("%s",s);
if( num_treasure== ){
int m_min = a[].val[];
int m_num = ;
for( int i=;i<hunter;i++ ){
if( m_min>a[i].val[] ){
m_min = a[ i ].val[];
m_num = i;
}
}
if( ca!= ) printf("\n");
ca++;
for( int i=;i<hunter;i++ ){
if( i==m_num ){
printf("1 %d\n",m_min);
}
else
printf("0\n");
}
continue;
}
dfs( ,,num_treasure,hunter );
if( ca!= ) printf("\n");
ca++;
for( int i=;i<hunter;i++ ){
for( int j=;j<ans[i].cnt;j++ ){
if( j== )
printf("%d",ans[i].num[j]+);
else
printf(" %d",ans[i].num[j]+);
}
if( ans[i].cnt> ) printf(" %d\n",ans[i].sum);
else printf("%d\n",ans[i].sum);
}
}
return ;
}
POJ2220+DFS的更多相关文章
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
随机推荐
- Android之调试打印
- 理解JavaScript原型式继承
0.基础 javascript没有类的概念, javascript不需要实例化某个具体类的实例.javascript对象本身可以用来创建对象, 而对象可以继承自其他对象, 这个概念称为原型式继承 每个 ...
- 浅谈JAVA集合框架(转载)_常用的Vector和HashMap
原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html Java提供了数种持有对象的方式,包括语言内置的Array,还有 ...
- WPF嵌入百度地图完整实现
无论是做App还是web开发,很多都会用到地图功能,一般都会调用第三方的API实现地图功能!而正如国内的地图API提供方,基本上对Android.IOS和web开发提供了很完整的一套API,但是对于桌 ...
- 10_HTTP协议_入门知识
[什么是HTTP协议] 对 浏览器客户端 和 服务器端之间的数据传输的格式规范. 客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵循一定的通讯格式,HTTP协议用于定义客户端与 ...
- [PR & ML 4] [Introduction] Model Selection & The Curse of Dimension
这两部分内容比较少,都是直觉上的例子和非正式的定义,当然这本书中绝大多数定义都是非正式的,但方便理解.后面深入之后会对这两个章节有详细的阐述.
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...
- Struts2文件上传方式与上传失败解决方式
首先将几个对象弄出来第一个 上传页面第二个 上传action第三个 startut2配置文件 我的文字描述不是很好,但是终归是自己写出来的,后来我在网上看到一篇关于文件上传描述的非常清楚的文章, 链接 ...
- jQuery 选择器(转)
jQuery 选择器 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元 ...
- [转] Js获取 本周、本月、本季度、本年、上月、上周、上季度、去年时间段
/** * 针对时间的工具类 */ var DateTimeUtil = function () { /*** * 获得当前时间 */ this.getCurrentDate = function ( ...