poj 3229 The Best Travel Design ( 图论+状态压缩 )
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 1359 | Accepted: 340 |
Description
Input
x=y=len=kind=0 means end of the path explanation.
N=M=K=0 means end of the input.
Output
Sample Input
3 3 3
1 2 3
10 8 6
1 2 120 0
1 3 60 1
2 3 50 1
0 0 0 0
3 3 2
1 2 3
10 8 6
1 2 120 0
1 3 60 1
2 3 50 1
0 0 0 0
0 0 0
Sample Output
3
No Solution
Source
#include<cstdio>
#include<iostream>
#include<algorithm>
#define INF 1e9
using namespace std; double a[20],t;
double map[22][22];
double dp[20][1<<20];
int n,m; void init()
{
int i,j;
for(i=0;i<n;i++)
{
map[i][i]=0;
for(j=0;j<n;j++)
{
map[i][j]=INF;
}
for(j=0;j<(1<<n);j++) //所有状态下i为终点的用时都初始化为无穷大
{
dp[i][j]=INF;
}
}
}
void floyd()
{
int i,j,k;
for(k=0; k<n; k++) //k为i和j之间的点
{
for(i=0; i<n; i++)
{
if(i!=k&&map[i][k]<INF)
for(j=0; j<n; j++)
{
if(i!=j&&map[k][j]<INF)
{
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
}
}
}
}
} int main()
{
int res,cnt,tmp,ans,x,y,kind,len,i,j,k;
while(scanf("%d%d%lf",&n,&m,&t),(n||m||t))
{
res=0,ans=-1;
double day=t*12.0;
init();
for(i=1;i<=m;i++)
{
scanf("%d",&k);
res+=1<<(k-1); //res记录要访问的所有点的状态,便于之后对照。
}
for(i=0;i<n;i++)
scanf("%lf",&a[i]); //a[i]记录每个景点stay的用时
while(scanf("%d%d%d%d",&x,&y,&len,&kind),(x||y||len||kind))
{
x--,y--; //转化为以0为起点
double hour=len*1.0/(kind?120.0:80.0);
map[x][y]=min(hour,map[x][y]);
map[y][x]=min(hour,map[y][x]);
}
floyd();
for(i=1;i<n;i++)
dp[i][1<<i]=map[0][i]+a[i]; //初始化从起点直接到i的用时
for(j=0;j<(1<<n);j++) //枚举所有状态
{
for(i=0;i<n;i++) //在起点0和i之间取点k来更新最短用时,dp实现
{
if((j&(1<<i))&&j!=(1<<i)) //j状态包含0-->i的状态且不等于那个状态
{
for(k=0;k<n;k++)
{
if((j&(1<<k)&&i!=k&&j!=(1<<k)))
dp[i][j]=min(dp[i][j],dp[k][j-(1<<i)]+map[k][i]+a[i]);
}
if(((j&res)==res)&&map[i][0]+dp[i][j]<=day) //如果j状态包含res记录的状态且用时小于等于限定的时间
{
tmp=j;
cnt=0;
while(tmp) //j状态每一位的状态进行遍历
{
if(tmp%2) cnt++; //为1的位则cnt++
tmp=tmp>>1;
}
ans=max(cnt,ans); //更新最大值
//printf("test: %d\n",ans);
}
}
}
}
if(ans>=0)
printf("%d\n",ans);
else printf("No Solution\n");
}
return 0;
} //391MS
poj 3229 The Best Travel Design ( 图论+状态压缩 )的更多相关文章
- poj 3311 Hie with the Pie(状态压缩dp)
Description The Pizazz Pizzeria prides itself or more (up to ) orders to be processed before he star ...
- POJ 1185 炮兵阵地(经典的状态压缩DP)
题意:中文题. 思路,经典的状态压缩题目. 由于列长比较小,我们可以以行为阶段用状态压缩来做. 由于攻击只占两个格,这样从行的角度看,第i行的炮兵只与前i-1和前i-2行有关系.这样如果用j,k,l分 ...
- POJ 3311 Hie with the Pie(Floyd+状态压缩DP)
题是看了这位的博客之后理解的,只不过我是又加了点简单的注释. 链接:http://blog.csdn.net/chinaczy/article/details/5890768 我还加了一些注释代码,对 ...
- poj 1753 Flip Game 枚举(bfs+状态压缩)
题目:http://poj.org/problem?id=1753 因为粗心错了好多次……,尤其是把1<<15当成了65535: 参考博客:http://www.cnblogs.com/k ...
- poj 2777 Count Color(线段树、状态压缩、位运算)
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 38921 Accepted: 11696 Des ...
- POJ 2046 Gap 搜索- 状态压缩
题目地址: http://poj.org/problem?id=2046 一道搜索状态压缩的题目,关键是怎样hash. AC代码: #include <iostream> #include ...
- poj2443(简单的状态压缩)
POJ2443 Set Operation Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2679 Accepted: ...
- poj 3311 floyd+dfs或状态压缩dp 两种方法
Hie with the Pie Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6436 Accepted: 3470 ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
随机推荐
- android-'Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 8'
解决的方案是将jdk1.7制定的版本定制为jdk.6.即 在eclipse中,右键项目->Properties->Java Compiler->enable "projec ...
- Specified VM install not found: type Standard VM, name jdk1.6.0_05
重装系统换了jdk,之前jdk用的1.6,现在改成1.7了.但是更新之后发现ant打包用不了了,报错 Specified VM install not found: type Standard VM, ...
- 【USACO 1.4.4】母亲的牛奶
[题目描述] 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原 ...
- js中的模块化编写思维
作为一个新手程序员,在编程时一定要刻意锻炼自己的模块化编写思路,但是究竟什么才是模块化编写对于新人来说还是不太能够直观的理解,下面就举个简单的例子来说明一下 概念:最早接触模块化的说法是从java上, ...
- js移动设备手机跳转地址代码
if(/AppleWebKit.*mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alc ...
- PHP文件类型检查类-比较全的
在CSDN上淘来的一个文件类型的类,还不错,留下自己看! <? /** * 检证文件类型类 * * @author */ class FileTypeValidation { // 文件类型,不 ...
- Memcached源码分析——hash
以下为memcached中关于使用的hash算法的一点记录 memcached中默认使用的是Bob Jenkins的jenkins_hash算法 以下4段代码均在memcached-1.4.22/ha ...
- 一次完整的HTTP事务是怎样一个过程?(转)
(转自http://www.linux178.com/web/httprequest.html)写的太好了,转一个. 关于HTTP协议可以参考以下: HTTP协议漫谈 http://kb.cnblog ...
- redis-cli批量删除时的坑
redis-cli keys "*"|xargs redis-cli del tips: keys后面的*号,必须要加双引号,不然删不掉 # redis-cli keys *|xa ...
- java数据安全(一)
在java开发中,常常需要考虑数据安全问题,然不仅仅需要考虑数据存储的安全,还需要考虑数据的传输安全.自从有了数据安全问题后,密码学也就出来了.了解数据安全,首先需要了解密码学 1.什么是密码学 密码 ...