poj 3311Hie with the Pie
题意:一个送披萨的,每次送外卖不超过10个地方,给你这些地方之间的时间,求送完外卖回到店里的总时间最小。
解法一:
这个n不大,即使是NP问题也才1E6多一些所以可以dfs();具体的回溯方法结合dance link 就可以;
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
int Map[][];
int Stack[],pos;
int left[];
int right[];
int n,ans,tmp,num;//比较怕爆栈 放到内存理好
void inint()
{
ans=0x7fffffff;
pos=;
for(int i=;i<=n;i++)
left[i]=i-,right[i]=i+;
for(int k=;k<=n;k++)for(int i=;i<=n;i++)for(int j=;j<=n;j++)
Map[i][j]=min(Map[i][j],Map[i][k]+Map[k][j]);
}
void make()
{
tmp=Map[][Stack[]];
for(int i=;i<pos;i++)
tmp+=Map[Stack[i-]][Stack[i]];
tmp+=Map[Stack[pos-]][];
ans=min(ans,tmp);
}
void dfs()
{
//system("pause");
if(num==n){make();return;} for(int i=right[];i<=n;i=right[i])
{
num++;
right[ left[i] ]=right[i];
left [ right[i]]=left[i];
Stack[pos++]=i;
dfs();
num--;
right[ left[i] ]=i;
left [ right[i]]=i;
pos--;
}
}
int main()
{
while(~scanf("%d",&n))
{
if(n==) return ; for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%d",&Map[i][j]);
inint();
dfs();
printf("%d\n",ans);
}
return ;
}
解法2 :我交完了发现怎么都是 0MS 我的200多点;
仔细想了想可以用DP 解决NP 问题 dp[i][j] = min( dp[i][j ] , dp[i^(1<<j)][k] + dis[k][j] );(dp[i][j] 中 i 是二进制数 每一位表示这一味走没走过;
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
const int INF=<<;
int dp[<<][];
int n;
int Map[][];
void inint()
{
dp[][]=;
for(int i=;i<(<<);i++)for(int j=;j<;j++)dp[i][j]=INF; for(int k=;k<=n;k++)for(int i=;i<=n;i++)for(int j=;j<=n;j++)
Map[i][j]=min(Map[i][k]+Map[k][j],Map[i][j]);
}
void solve()
{
for(int i=;i<(<<n);i++)
for(int j=;j<n;j++)
{
if(==(i&(<<j))) continue;
if(i==(<<j)) dp[i][j]=Map[][j+];
else
{
for(int k=;k<n;k++)
if(k!=j&&(i&(<<k)))
dp[i][j]=min(dp[i][j],dp[i^(<<j)][k]+Map[k+][j+]);
}
}
int ans=INF;
for(int i=;i<n;i++)
ans=min(ans,dp[(<<n)-][i]+Map[i+][]);
printf("%d\n",ans);
}
int main()
{
while(~scanf("%d",&n))
{
if(n==)return ;
for(int i=;i<=n;i++)for(int j=;j<=n;j++)
scanf("%d",&Map[i][j]);
inint();
solve();
}
return ;
}
poj 3311Hie with the Pie的更多相关文章
- POJ 3311---Hie with the Pie(状压DP)
题目链接 Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as ...
- [SinGuLaRiTy] 分治题目复习
[SInGuLaRiTy-1025] Copyrights (c) SinGuLaRiTy 2017. All Rights Reserved. [POJ 1905] 棍的膨胀 (Expanding ...
- poj 3311 Hie with the Pie
floyd,旅游问题每个点都要到,可重复,最后回来,dp http://poj.org/problem?id=3311 Hie with the Pie Time Limit: 2000MS Me ...
- POJ - 3122 Pie(二分)
http://poj.org/problem?id=3122 题意 主人过生日,m个人来庆生,有n块派,m+1个人(还有主人自己)分,问每个人分到的最大体积的派是多大,PS每 个人所分的派必须是在同一 ...
- Hie with the Pie POJ - 3311
Hie with the Pie POJ - 3311 The Pizazz Pizzeria prides itself in delivering pizzas to its customers ...
- 【POJ 3122】 Pie (二分+贪心)
id=3122">[POJ 3122] Pie 分f个派给n+1(n个朋友和自己)个人 要求每一个人分相同面积 但不能分到超过一个派 即最多把一整个派给某个人 问能平均分的最大面积 二 ...
- POJ 3311 Hie with the Pie(DP状态压缩+最短路径)
题目链接:http://poj.org/problem?id=3311 题目大意:一个送披萨的,每次送外卖不超过10个地方,给你这些地方之间的时间,求送完外卖回到店里的总时间最小. Sample In ...
- POJ 3122 Pie 二分枚举
题目:http://poj.org/problem?id=3122 这个题就好多了,没有恶心的精度问题,所以1A了.. #include <stdio.h> #include <ma ...
- poj Pie
http://poj.org/problem?id=3122 #include<cstdio> #include<cstring> #include<cmath> ...
随机推荐
- nginx源代码分析--高性能server开发 常见的流程模型
1.高性能server 对于高性能server对于.处理速度和占用空间小是典型特性.特别是当server经验C10K问题的时候(网络server在处理数以万计的client连接时.往往出现效率低下甚至 ...
- Tiny server:小型Web服务器
一.背景 csapp的网络编程粗略的介绍了关于网络编程的一些知识,在最后的一节主要就实现了一个小型的Webserver.这个server名叫Tiny,它是一个小型的可是功能齐全的Webserver.在 ...
- 浅谈spring——注解配置(九)
spring定义一个切面是件麻烦的事情,需要实现专门的接口,还要进行一些较为复杂的配置,有没有较为简单的方法??? @AspectJ注解可以很容易定义一个切面,且不需要实现任何的接口.缺点是对JDK的 ...
- spring Annotation 组分注塑
spring 注意分类 启动spring自己主动扫描功能 <context:component-scan/> 1.@Repository: 它用于将数据訪问层 (DAO 层 ) 的类标识为 ...
- selenium让人摸不着头脑的问题
selenium让人摸不着头脑的问题 问题一 使用webdriver驱动firefox浏览器时如果不设置参数,默认使用的Firefox的profile和平时打开浏览器使用的firefox不一样,如果要 ...
- 服务器编程入门(2)IP协议详解
问题聚焦: IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一.这里从两个方面较为深入地探讨IP协议: 1,IP头部信息(指定IP通信的源端IP地址,目的端IP ...
- Android开发之按键、触摸屏和手势输入专业压力測试方法
按键输入.触摸屏输入和手势笔画输入等功能是Android开发的基本功能.其稳定性和健壮性对移动应用系统开发很重要.按键.触摸屏和手势输入专业压力測试方法能够使用Monkey,相应用程序进行压力測试,检 ...
- POJ 1838 Banana (并查集)
Description Consider a tropical forrest, represented as a matrix. The cell from the right top corner ...
- ReferenceError: Error #1069: 在 spark.components.RadioButtonGroup 上找不到属性 label,且没有默认值
1.错误描写叙述 ReferenceError: Error #1069: 在 spark.components.RadioButtonGroup 上找不到属性 label,且没有默认值. at Ch ...
- HDU 2451 Simple Addition Expression(组合数学)
主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2451 Problem Description A luxury yacht with 100 pass ...