cdoj1588 潘爷泡妹
地址:http://acm.uestc.edu.cn/#/problem/show/1588
题目:复制过来发现有问题,自己去cdoj看吧
思路:
1.先进行多次spfa跑出所有人之间的相互到达所需要的步数。
2.知道所有人之间的距离关系后,就是个从初始点出发泡q个妹子所需要的最少花费问题。
这时你可以全排列求解:O(q!)
或者状压dp:dp[s][x]可以转移到dp[s|(1<<k)],x可到达k。时间复杂度O((q^2)*(2^q));
#include <bits/stdc++.h> using namespace std; #define MP make_pair
#define PB push_back
typedef long long LL;
typedef pair<int,int> PII;
const double eps=1e-;
const double pi=acos(-1.0);
const int K=1e6+;
const int mod=; struct node
{
int x,y,v;
node(){}
node(int a,int b,int c){x=a,y=b,v=c;}
}gg[];
int d[][],dp[<<][];
int n,m,s,q,dis[][],inque[][];
int dx[]={-,-,-,-,,,,};
int dy[]={-,,-,,-,,-,}; void bfs(node &ta)
{
queue<node>q;
memset(dis,0x3f3f3f3f,sizeof dis);
memset(inque,,sizeof inque);
q.push(ta),dis[ta.x][ta.y]=,inque[ta.x][ta.y]=;
while(q.size())
{
node x=q.front();
q.pop(),inque[x.x][x.y]=;
for(int i=;i<;i++)
{
int nx=x.x+dx[i],ny=x.y+dy[i];
if(!(nx>= && ny>= && nx<=n && ny<=m))
continue;
if(dis[nx][ny]>dis[x.x][x.y]+abs(dx[i]))
{
dis[nx][ny]=dis[x.x][x.y]+abs(dx[i]);
if(!inque[nx][ny])
q.push(node(nx,ny,)),inque[nx][ny]=;
}
}
}
}
int main(void)
{
std::ios::sync_with_stdio(false);
std::cin.tie();
int t;
cin>>t;
while(t--)
{
int ans=0x3f3f3f3f;
cin>>n>>m>>s>>q>>gg[].x>>gg[].y;
for(int i=; i<=s; i++)
cin>>gg[i].x>>gg[i].y>>gg[i].v;
for(int i=;i<=s;i++)
{
bfs(gg[i]);
for(int j=;j<=s;j++)
d[i][j]=dis[gg[j].x][gg[j].y];
//printf("d[%d][%d]:%d\n",i,j,d[i][j]);
}
memset(dp,0x3f3f3f3f,sizeof dp);
for(int i=;i<=s;i++)
dp[<<(i-)][i]=d[][i]+gg[i].v;
for(int i=,sz=(<<s);i<sz;i++)
{
for(int j=;j<s;j++)
for(int k=;k<s;k++)
if(((<<j)^i) && ((<<k)&i))
dp[i|(<<j)][j+]=min(dp[i][k+]+d[k+][j+]+gg[j+].v,dp[i|(<<j)][j+]);
}
for(int i=,sz=(<<s);i<sz;i++)
for(int j=;j<=s;j++)
{
int sum=;
for(int k=;k<s;k++)
if(i&(<<k)) sum++;
if(sum==q)ans=min(ans,dp[i][j]);
}
if(ans>=0x3f3f3f3f)
ans=-;
cout<<ans<<"\n";
}
return ;
}
cdoj1588 潘爷泡妹的更多相关文章
- 第一次当Uber司机,就拉到漂亮妹纸
黑马哥的Uber司机端装上很久了,一次活儿也没拉,心里一直有一种当“张师傅”的冲动.黑马哥当Uber司机,肯定不是为了图挣钱,也不是因为Uber有“新约炮神器”的称号,能通过“拉活”来泡妹纸.黑马哥体 ...
- javascript面向对象(一)
javascript是弱类型,直译式的面相对象编程语言. 在之前我们说过 var a = 123: 在这里a是整数 但是我们可以给a重新复制为 a="你好"; 在这个过程中变量a ...
- python基础整理4——面向对象装饰器惰性器及高级模块
面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...
- window系统下的pycharm对虚拟机中的Ubuntu系统操作MySQL数据库
问题:程序员和数据库的爱情故事:程序为了追一个叫MySQL数据库的姑娘,先苦练功夫,自己模拟泡妹过程积累经验,于是想到一个解决方法:[解决虚拟机跑需要连接数据库的程序卡的问题,通过在物理机Window ...
- 《云中歌》孟石头泡妞大法独家放送,单身汪get起来!!
谁说古代文人雅士只会诗词歌赋.琴棋书画?作为“玉中之王”的公子哥——孟石头泡妞可是个中高手,总结起来都能出一本“泡妞宝典”了,单身的乃们还不赶紧学起来! 第一步:假装自来熟相识,马上开启约会模式 看到 ...
- loj #6046. 「雅礼集训 2017 Day8」爷
#6046. 「雅礼集训 2017 Day8」爷 题目描述 如果你对山口丁和 G&P 没有兴趣,可以无视题目背景,因为你估计看不懂 …… 在第 63 回战车道全国高中生大赛中,军神西住美穗带领 ...
- 教妹学 Java:大有可为的集合
00.故事的起源 “二哥,上一篇<泛型>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很是关心. “有人评论说,‘二哥你敲代码都敲出幻想了啊.’” “呵呵,这句话 ...
- 教妹学 Java:难以驾驭的多线程
00.故事的起源 “二哥,上一篇<集合>的反响效果怎么样啊?”三妹对她提议的<教妹学 Java>专栏很关心. “这篇文章的浏览量要比第一篇<泛型>好得多.” “这是 ...
- 科学把妹法 ( ̄▽ ̄)"
曾经有一位生物学人士,公布了工科把妹第一弹,暨“巴甫洛夫把妹法”: 每天给你那位心仪的女同事/女同学的抽屉里都放上精心准备的早餐,并且保持缄默不语,无论她如何询问,都不要说话. 如此坚持一至两个月, ...
随机推荐
- ulimit命令学习
通过ulimit -n命令可以查看linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值.那么应该在 ...
- freemarker0
assign 用于为该模板页面 创建或替换一个顶层变量 或创建或替换多个顶层变量 列子如下 <#assign name=value [in namespacehash]>,指定一个名为n ...
- uva 707(记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21261 思路:此题需要记忆化搜索,dp[x][y][t]表示当前状 ...
- 控制iOS 7中的状态栏
本文转载至:http://blog.csdn.net/pucker/article/details/12112105 苹果终于发布了iOS 7正式版,大批的用户都已经纷纷进行了升级.如果App是由Xc ...
- 【黑金原创教程】【Modelsim】【第六章】结束就是开始
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...
- Hibernate中的一些关键字理解
ORM的理解: ORM(Object/Relation Mapping): 对象/关系映射ORM 主要解决对象-关系的映射: ORM的思想:将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序 ...
- response.setContentType()的String参数及对应类型(转)
response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据. 例如web浏览器就是通过MI ...
- APACHE优化参数
1.CentOS5.8 x86_64位 采用最小化安装,系统经过了基本优化篇2.apache版本:httpd-2.2.293.源码包存放位置:/home/oldboy/tools4.源码包编译安装位置 ...
- Storm编程模型及组件流程图
一.Storm编程模型 二.Storm组件流程图
- 兼容获取scrollTop和scrollLeft(被滚动条卷走的部分)
function scroll() { //ie9+ 标准浏览器 if (window.pageYOffset != null) { return { left: window.pageXOffset ...