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 ...
随机推荐
- 初步接触html心得
接触HTML大概有七天,做一下小总结,过过记忆. html大致可分为三部分:Dtd头.Head.Body三大部分. Dtd头:是用于浏览器编辑的,也就是俗话说的给电脑看的的东西. Head:内细分下大 ...
- mvc模式实现
listdemo.html负责显示,listModel.class.php负责从数据库存储数据和查找数据,mysql.class.php是操作数据库的类,但不直接使用,model类调用mysql,li ...
- 汉诺塔的问题:4个柱子,如果塔的个数变位a,b,c,d四个,现要将n个圆盘从a全部移到d,移动规则不变
四柱汉诺塔问题的求解程序.解题思路:如a,b,c,d四柱. 要把a柱第n个盘移到目标柱子(d柱),先把上层 分两为两部份,上半部份移到b柱,下半部分移到c柱,再把第n盘移到 目标柱子,然后,c柱盘子再 ...
- spring3.2.0与mybatis3.2.7整合出错--Failed to read candidate component class--nested exception is java.lang.IllegalArgumentException
错误信息如下: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate com ...
- effective c++(05)(06)之c++默默编写并调用的函数
1. 当只写一个空类的时候,编译器会为他声明一个copy构造函数,一个copy assignment函数和一个析构函数.如下: 如果写下: class Empty{ }; 编译器就会实现以下代码: c ...
- list,tuple,dict,字符串常用知识总结
创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...
- YYKit之YYModel
原文:http://www.cnblogs.com/lujianwenance/p/5706548.html 本文主要是对YYModel文件结构的简单分析,能帮助你更快的熟悉和学习YYModel ...
- json转换(c#后台生成json的方法)
此文转自:http://bbs.csdn.net/topics/380200497,为了方便自己记忆才以文章形式保存. using System; using System.Collections.G ...
- 在centos7中限制kvm虚拟机可访问的资源
最近通过艰苦卓绝的度娘(我很想用谷歌,可是,你懂的),终于搞明白如何在centos7中限制kvm虚拟机可访问的资源了.度娘给出的结果中,大部分都说的很对,然而,却很难照着做,主要原因有两点:1.网上的 ...
- MVC开发 好的扩展套件(Visual Studio 插件)