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>专栏很关心. “这篇文章的浏览量要比第一篇<泛型>好得多.” “这是 ...
- 科学把妹法 ( ̄▽ ̄)"
曾经有一位生物学人士,公布了工科把妹第一弹,暨“巴甫洛夫把妹法”: 每天给你那位心仪的女同事/女同学的抽屉里都放上精心准备的早餐,并且保持缄默不语,无论她如何询问,都不要说话. 如此坚持一至两个月, ...
随机推荐
- ActiveMQ搭建
下载 到ActiveMQ官网,找到下载点. 目前, 官网为http://activemq.apache.org/ Linux版本下载点之一为:http://apache.fayea.com/activ ...
- ios开发之 -- 5分钟集成融云的客服功能
最近项目中遇到了客服的功能,首先想到的就是使用融云的功能,因为以前做的即时通讯的项目,用的都是融云的sdk,花了点时间研究了下,希望能帮到大家! 废话不多说,步骤如下: 一.申请融云账号 二.创建应用 ...
- 《C++ Primer Plus》学习笔记——C++程序创建到运行的整个过程
当你编写了一个C++,如何让它运行起来呢?具体的步骤取决于计算机环境和使用的C++编译器,但大体如下: 1.使用文本编辑器编写程序,并将其保存到文件中,这个文件就是程序的源代码. 2.编译源代码.这意 ...
- Win32控制台中使用定时器的方法
在MFC中用OnTimer()函数就可以很方便的实现定时事件,但在Win32控制台工程中没有消息循环,MSDN里也不推荐把SetTimer()用在Console Applications里. 同理,在 ...
- ios UITableView高度自适应(转)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // ...
- 160310、oracle数据库的读写分离
PS:使用AbstractRoutingDataSource路由数据源实现动态数据库的调用 1. 连接哪个数据源的环境变量 package com.hysoft.common; public ...
- FZU 2144 Shooting Game (贪心区域划分)
Problem 2144 Shooting Game Accept: 370 Submit: 1902 Time Limit: 1000 mSec Memory Limit : 32768 KB Pr ...
- CH5101 LCIS【线性dp】
5101 LCIS 0x50「动态规划」例题 描述 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了 ...
- 用Nginx反向代理Node.js
安装pm2 npm install pm2 -g ln -s /home/download/node-v8.11.1-linux-x64/lib/node_modules/pm2/bin/pm2 /u ...
- 剑指Offer——构建乘积数组
题目描述: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]. ...