hdu 4284 状态压缩dp
题意: 有N 个点的无向图,要去其中 h个地点做事,做事需要先办理护照,之后可以挣一定数量的钱,知道了一开始有的总钱数,和 一些城市之间
道路的花费,问可不可以在 指定的 h 个城市打完工,并回到起点 1.
链接:点我
是个好题!!!
状态转移方程dp[s][i]=max(dp[s][i],dp[s'][j]-maps[j][i]-d[i]+c[i]);
dp[s][i]表示当在状态s的时候最后再i城市打工的最多剩余钱数。
2
4 5 10 //4个点,5个道路,10单位的钱
1 2 1
2 3 2
1 3 2
1 4 1
3 4 2
3 //3个必去的
1 8 5 //编号,消耗,赚的
2 5 2
3 10 1
2 1 100
1 2 10000
1
2 100000 1
YES
NO
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define INF 99999999
typedef long long LL;
using namespace std; const int MAX=(<<)+;
int n,m,val,h;
int s[],c[],d[];
int dp[MAX][],dist[][]; void Init(int num){
for(int i=;i<=num;++i){
for(int j=i+;j<=num;++j)dist[i][j]=dist[j][i]=INF;
}
} void floyd(){
for(int k=;k<=n;++k){
for(int i=;i<=n;++i){
for(int j=;j<=n;++j){
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
}
}
}
} void DP(){
int bit=<<(h+);
memset(dp,-,sizeof dp);
dp[][]=val;
for(int i=;i<bit;++i){
for(int j=;j<=h;++j){
if(dp[i][j] == -)continue;
for(int k=;k<=h;++k){
if(dp[i][j]<dist[s[j]][s[k]]+d[k])continue;
int p=<<k,w=c[k]-d[k]; //可以去
if(i&p)continue; //已经去过
dp[i|p][k]=max(dp[i|p][k],dp[i][j]-dist[s[j]][s[k]]+w);
}
}
}
bool flag=false;
for(int i=;i<=h;++i)if(dp[bit-][i]-dist[s[i]][]>=)flag=true; //没返回过1
if(flag)printf("YES\n");
else printf("NO\n");
} int main(){
int t,u,v,w;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&val);
Init(n);
for(int i=;i<m;++i){
scanf("%d%d%d",&u,&v,&w);
dist[u][v]=dist[v][u]=min(dist[u][v],w);
}
scanf("%d",&h);
for(int i=;i<=h;++i){
scanf("%d%d%d",&s[i],&c[i],&d[i]);
}
floyd();
s[]=,c[]=d[]=;
DP();
}
return ;
}
hdu 4284 状态压缩dp的更多相关文章
- HDU 1074 (状态压缩DP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题目大意:有N个作业(N<=15),每个作业需耗时,有一个截止期限.超期多少天就要扣多少 ...
- HDU 3341 状态压缩DP+AC自动机
题目大意: 调整基因的顺序,希望使得最后得到的基因包含有最多的匹配串基因,使得所能达到的智商最高 这里很明显要用状态压缩当前AC自动机上点使用了基因的情况所能达到的最优状态 我最开始对于状态的保存是, ...
- hdu 2167 状态压缩dp
/* 状态转移方程:dp[i][j]=Max(dp[i][j],dp[i-1][k]+sum[i][j]); */ #include<stdio.h> #include<string ...
- HDU 4856 (状态压缩DP+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4856 题目大意:有一个迷宫.迷宫里有些隧道,每个隧道有起点和终点,在隧道里不耗时.出隧道就耗时,你的 ...
- hdu 4284 状态压缩
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4284 #include<cstdio> #include<cstring> # ...
- HDU 4640 状态压缩DP 未写完
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640 解题思路: 首先用一个简单的2^n*n的dp可以求出一个人访问一个给定状态的最小花费,因为这i个 ...
- 2016"百度之星" - 初赛(Astar Round2A)1002 / HDU 5691 状态压缩DP
Sitting in Line Problem Description 度度熊是他同时代中最伟大的数学家,一切数字都要听命于他.现在,又到了度度熊和他的数字仆人们玩排排坐游戏的时候了.游戏的规则十 ...
- HDU 5067 (状态压缩DP+TSP)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5067 题目大意:蓝翔挖掘机挖石子.把地图上所有石子都运回起点,问最少耗时. 解题思路: 首先得YY出 ...
- hdu 4539(状态压缩dp)
题意:曼哈顿距离是指:|x1-x2|+|y1-y2|,只要知道这个概念题意就懂了. 分析:这道题与前面做的几道题有所不同,因为当前行不仅与前一行有关,而且与前两行有关,所以我们开数组的时候还要记录前两 ...
随机推荐
- python mysql参数化查询防sql注入
一.写法 cursor.execute('insert into user (name,password) value (?,?)',(name,password)) 或者 cursor.execut ...
- python初步学习-python函数 (二)
几个特殊的函数(待补充) python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda >& ...
- Java多线程学习(七)并发编程中一些问题
本节思维导图: 关注微信公众号:"Java面试通关手册" 回复"Java多线程"获取思维导图源文件和思维导图软件. 多线程就一定好吗?快吗?? 并发编程的目的就 ...
- Python3 多进程
多进程(multiprocessing)的用法和多线程(threading)类似,里面的函数也一样,start()为启动函数,join() 等待该进程运行结束,每一个进程也是由它的父进程产生 1.简单 ...
- for 、forEach 、 forof、 forin遍历对比
一.遍历内容的异同 1.for 和 for...in 是针对数组下标的遍历 2.forEach 及 for...of 遍历的是数组中的元素 二.对非数字下标的处理 由于array在js中也是对象中的一 ...
- iOS通知中心
iOS通知中心 它是iOS程序内部的一种消息广播机制,通过它,可以实现无引用关系的对象之间的通信.通知中心他是基于观察者模式,它只能进行程序内部通信,不能跨应用程序进程通信. 当通知中心接受到消息后会 ...
- IT行业经典面试技巧及方法思路。
问题1:为什么从上家公司离职?”能说说原因吗? 首先,作为一个从事招聘的HR,并不认为追问面试者为什么从上一家公司离职是个明智的做法起码不应该在面试一开始就抛出这个问题,一个较为明显的原因是因为这会引 ...
- 【转载】python-协程
转载自:廖雪峰的官方网站 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层 ...
- IOS-优质应用推荐
壁纸应用 cuto 免费 点击下载 shots 收费 点击下载 Cutisan 锁屏壁纸制作下载地址 待办事项 TodayMind - 提醒事项触手可及 点击下载 滴答清单 点击下载 Microsof ...
- 基于layui+cropper.js实现上传图片的裁剪功能
最近因项目需求,需要在上传图片的时候先对图片裁剪,然后在上传,所以就有了本文的出现. 开始正文之前,要提一下这个图片的裁剪:图片的裁剪,有前端裁剪,也可以后端裁剪 前端的裁剪我知道的可以分为这么两种: ...