题意:给出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. poj3660 Cow Contest(Floyd-Warshall方法求有向图的传递闭包)

    poj3660 题意: 有n头牛, 给你m对关系(a, b)表示牛a能打败牛b, 求在给出的这些关系下, 能确定多少牛的排名. 分析: 在这呢先说一下关系闭包: 关系闭包有三种: 自反闭包(r), 对 ...

  2. C# IO操作(三)文件编码

    在.net环境下新建一个文本文件(所谓文本文件就是直接可以用记事本打开的文件,直接保存字符串)和在系统中新建一个文本文件的编码是不一样的,.net默认采用UTF-8,而中文操作系统采用的是ANSI.如 ...

  3. Windows8安装Oracle11.2.0.1-0624,附带 DBCA建库、netca创建监听、配置PLSQL、定义客户端的环境变量 NLS_LANG、定义客户端的环境变量 TNS_ADMIN01

    Windows8安装Oracle11.2.0.1                                         操作系统:Windows 8 企业版 64bit Oracle:11. ...

  4. php ticks 调试应用

    declare(ticks=1); register_tick_function('do_profile'); register_shutdown_function('show_profile'); ...

  5. OC6_类方法

    // // Dog.h // OC6_类方法 // // Created by zhangxueming on 15/6/9. // Copyright (c) 2015年 zhangxueming. ...

  6. MyBatis拦截器:给参数对象属性赋值

    该拦截器的作用:在进行增加.修改等操作时,给数据模型的一些通用操作属性(如:创建人.创建时间.修改人.修改时间等)自动赋值. 该实现是在DAO层拦截,即存入DB前最后一层.后经分析,不是很合理,改为在 ...

  7. [PR & ML 1] [Introduction] Informal Basic Concepts

    最近还没更完OpenCV又开了新坑,谁教machine learning处在紧急又重要的地位呢.更新的内容总结自Pattern Recognition and Machine Learning by ...

  8. 一套帮助你理解C语言的测试题(转)

    前言 原文链接:http://www.nowamagic.net/librarys/veda/detail/775 内容 在这个网站(http://stevenkobes.com/ctest.html ...

  9. winform 通过 html 与swf 交互 简单案例

    在上一篇 winform 与 html 交互 简单案例 中讲了winform与html之间的简单交互,接下来的内容是在winform中以html为中转站,实现将swf嵌入winform中并实现交互. ...

  10. php新特性--持续更新

    命名空间 在其他语言中不算新鲜事,但php是5.3.0中引入,具体定义就不复述了,其主要作用是 封装和组织相关php类 .命名空间被引入之前php主要是通过Zend方式组织代码,这种方式带来的问题是类 ...