题意:给出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的更多相关文章

  1. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  2. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  3. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  4. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  5. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  6. POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)

    来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS   Memory Limit: 65536 ...

  7. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

随机推荐

  1. 读jQuery官方文档:样式

    样式 使用jQuery,无论是设置或者获取元素样式都十分简便. // 支持驼峰式和分割线式,两种方式等价(原生JavaScript只支持驼峰式) $('h1').css('fontSize'); $( ...

  2. 用jquery-easyui中的combotree实现树形结构的选择

    用jquery-easyui中的combotree实现树形结构的选择 需求:实现一个树形节点的选择,要求默认父节点都折叠,父节点前的checkbox不显示,子节点显示checkbox,且父节点不可选择 ...

  3. 自己动手写一个简单的(IIS)小型服务器

    因为第一次在博客园发表随笔,不太会用,这个笔记是我之前在印象笔记中写好的,然后直接copy过来,有兴趣自己做一个IIS服务器的小伙伴们可以参照下面的流程做一次,也可以叫我要源代码,不过要做完,我觉得花 ...

  4. python 安装第三方库,超时报错--Read timed out.

    Traceback (most recent call last): File "/home/xiaoduc/.pyenv/versions/3.5.0/lib/python3.5/site ...

  5. TD(TestDirector 8.0)在win7 ie8下无法用的解决方案:

    1.输入uac进入个人账户管理控制  选择最低  重启 2.以管理员身份进入cmd,执行脚本:bcdedit /set {current} nx AlwaysOff 重启

  6. 学习C++ Primer 的个人理解(九)

    这一章介绍顺序容器,在之前的第三章中,了解到的vector就属于顺序容器的一种. 一个容器就是一些特定类型对象的集合. 除了vector,还有哪些顺序容器? vector: 大小可变,随机访问的速度很 ...

  7. 九度OJ 1512 用两个栈实现队列 【数据结构】

    题目地址:http://ac.jobdu.com/problem.php?pid=1512 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 输入: 每 ...

  8. memcached 在windows下安装及启动

    memcached 在windows下安装及启动   Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数, ...

  9. javascript函数基础

    Function类型 由于函数是对象,因此函数名实际上是一个指向函数对象的指针,不会与函数绑定 所以没有重载这个概念!!!!!!!!!!!!!!!!!!!!!!!!!! function sum1() ...

  10. php中的require() 语句的使用方法

    php中的require() 语句的使用方法 require()语句包括并运行指定文件. require()语句包括并运行指定文件.有关包括如何工作的详细信息见 include() 的文档. requ ...