题目描述

贝西喜欢去洞穴探险。这次她去的地方由 N 个洞穴组成,编号分别是 1 到 N,1 号洞穴是出发
的起点。
洞穴之间由 M 条隧道相连,双向通行,第 i 条隧道连接 A i 和 B i 。每条隧道有个尺寸,第 i 条
隧道的尺寸为 W i ,如果贝西的身材超过了隧道的尺寸,就钻不过去了。贝西的身材可用一个数字来
描述,一开始是 0。
前期准备时,贝西已在 K 个里洞穴存放了食物,她当然不会放过它们。当她吃掉一份食物后,
身材就会增加 1。在探险的过程中,她想吃掉尽量多的食物,但要保证最后能返回起点。请帮她计划
一下,什么样的路线才能吃到最多的食物?
注意,探险的路线可以重复,所以路过有食物时,可以留到下次路过的时候再吃。

输入

• 第一行:三个整数 N,M 和 K,1 ≤ N ≤ 100,1 ≤ M ≤ 1000,1 ≤ K ≤ 14
• 第二行到第 K+1 行:第 i+1 行有一个整数 C i ,表示在第 C i 号洞穴里有一份食物,1 ≤ C i ≤ N
• 第 K +2 行到第 K +M +1 行:第 i+K +1 行有三个整数 A i ,B i 和 W i ,1 ≤ A i ,B i ≤ N,1 ≤
W i ≤ 100

输出

• 单个整数:表示贝西最多能吃几份食物

样例输入

6 7 5 1 2 3 4 5 1 2 3 3 6 2 6 2 10 2 4 1 5 1 1 4 5 1 1 6 1

样例输出

4

提示

先吃 5 号洞里的,再吃 3,2,最后走回 1,
吃掉 1 里的最后一份食物
 
 
题解:
K<=14 很明显可以状压 ,然后发现想不出什么方程式,于是就上状压搜索,分析复杂度(1<<K)*N = 10^6 随便水过.
于是上记忆搜乱搞 F[i][j] 到i这个点状态为j 是否走过
注意:如果有食物在1号点,注意特判
 
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=,M=,Z=;
int gi(){
int str=;char ch=getchar();
while(ch>'' || ch<'')ch=getchar();
while(ch>='' && ch<='')str=str*+ch-,ch=getchar();
return str;
}
int n,m,k,w[N],head[N],num=,id[N];
struct Lin{
int next,to,dis;
}a[M<<];
void init(int x,int y,int z){
a[++num].next=head[x];
a[num].to=y;
a[num].dis=z;
head[x]=num;
}
bool mark[N][<<Z];int ans=;
void dfs(int x,int p,int tot)
{
if(mark[x][p])return ;
mark[x][p]=true;
if(x== && tot>=ans)
{
if(w[] && !(p&(<<(id[]-))))ans=tot+;
else ans=tot;
}
int u;
for(int i=head[x];i;i=a[i].next)
{
u=a[i].to;
if(tot>a[i].dis)continue;
dfs(u,p,tot);
if(p&(<<(id[x]-)))continue;
if(w[x] && tot<a[i].dis)dfs(u,p|(<<(id[x]-)),tot+);
}
}
int main()
{
int x,y,z;
n=gi();m=gi();k=gi();
for(int i=;i<=k;i++)x=gi(),w[x]=,id[x]=i;
for(int i=;i<=m;i++)
{
x=gi();y=gi();z=gi();
init(x,y,z);init(y,x,z);
}
dfs(,,);
printf("%d",ans);
return ;
}

【USACO】 洞穴奶牛的更多相关文章

  1. 157. [USACO Nov07] 奶牛跨栏

    157. [USACO Nov07] 奶牛跨栏(点击转到COGS) 输入文件:hurdles.in   输出文件:hurdles.out 时间限制:1 s   内存限制:128 MB 译 by CmY ...

  2. SPFA cojs 176. [USACO Feb07] 奶牛聚会

    cojs 176. [USACO Feb07] 奶牛聚会 ★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比时间限制:3 s   内存限制:16 MB N(1 ≤ ...

  3. cogs 141. [USACO Jan08] 奶牛的选举

    141. [USACO Jan08] 奶牛的选举 ★   输入文件:elect.in   输出文件:elect.out   简单对比时间限制:1 s   内存限制:16 MB 在推翻了Farmer J ...

  4. 题解 [USACO Mar08] 奶牛跑步

    [USACO Mar08] 奶牛跑步 Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所 ...

  5. cogs157. [USACO Nov07] 奶牛跨栏 x

    157. [USACO Nov07] 奶牛跨栏 ★★   输入文件:hurdles.in   输出文件:hurdles.out   简单对比时间限制:1 s   内存限制:128 MB 译 by Cm ...

  6. 157. [USACO Nov07] 奶牛跨栏(第三次考试大整理)

    157. [USACO Nov07] 奶牛跨栏 输入文件:hurdles.in   输出文件:hurdles.out   简单对比 时间限制:1 s   内存限制:128 MB 译 by CmYkRg ...

  7. cogs 176. [USACO Feb07] 奶牛聚会 dijkstra

    176. [USACO Feb07] 奶牛聚会 ★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比时间限制:3 s   内存限制:16 MB 译: zqzas N ...

  8. usaco 地震 && 奶牛观光

    Usaco 地震: Description 一场地震把约翰家的牧场摧毁了,坚强的约翰决心重建家园.约翰已经重建了N个牧场, 现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发现可供修建的道路 ...

  9. usaco 安慰奶牛

    Description 约翰有N个牧场,编号依次为1到N.每个牧场里住着一头奶牛.连接这些牧场的有P条 道路,每条道路都是双向的.第j条道路连接的是牧场Sj和Ej,通行需要Lj的时间.两牧场之 间最多 ...

随机推荐

  1. The sum of numbers form 0 to n.(20.9.2017)

    #include <stdio.h> int main() { int a,b,sum; printf("输入一个数字: "); scanf("%d" ...

  2. 201621123043 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 泛型的定义: 泛型,即"参数化类型".一提到参数,最熟悉的就是定义方法时有形参,然后调用此 ...

  3. verilog学习笔记(2)_一个小module及其tb

    module-ex_cnt module ex_cnt( input wire sclk, input wire rst_n, output wire[9:0] cnt ); reg [9:0] cn ...

  4. Centos7 Yum方式安装Mysql7

    不废话,直奔主题,可以覆盖安装. 下载并安装MySQL官方的 Yum Repository [root@localhost ~]# wget -i -c http://dev.mysql.com/ge ...

  5. jupyter notebook下python2和python3共存(Ubuntu)

    提示NOTICE 时间:2018/04/06 主题:Ubuntu 下CAFFE框架 主角:Jupyter Notebook 简介: Jupyter Notebook(此前被称为 IPython not ...

  6. java 零基础搭建dubbo运行环境

    一:简介    以前做项目时,分布式环境都是其它同事在搭建,自己也没参与分布式环境搭建,只负责开发,由于近段时间工作重心转到android,java后台有一段时间没有接触了,刚好这几天有空,决定自己动 ...

  7. Apache虚拟主机实战

    [root@localhost ~]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.32.tar.bz2  [root@localho ...

  8. Python内置函数(5)——pow

    英文文档: pow(x, y[, z]) Return x to the power y; if z is present, return x to the power y, modulo z (co ...

  9. 什么是MQTT协议?

    MQTT协议介绍 MQTT协议是什么? MQTT(Message Queuing Telemetry Transport Protocol)的全称是消息队列遥感传输协议的缩写,是一种基于轻量级代理的发 ...

  10. 记一次将公司网站http换成https

    看了博客园将近一年了,一直都只是在被动的看,总觉得应该写点什么,但是又不知道该写点什么.今天正好公司要把网站由http换成https,那我就顺便记录一下吧. 由于之前没有弄过,所以就面向百度编程. 首 ...