hdu 4571 floyd+动态规划
思路:
我们先求一遍floyd,将各点的最短距离求出,然后将点按si的升序排序。dp[i][k]表示第i个点在第j时间所获得的最大效益,那么
dp[i][k]=max(dp[ i ][ k ] , dp[ j ][ k-p[ i ].c-dis[ i ][ j ] ]+p[ i ].s); dis[i][j]为i与j的最短路径。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define inf 1<<28
using namespace std;
struct Point{
int c,s,num;
int operator <(const Point &temp) const
{
return s<temp.s;
}
}p[];
int dp[][],dis[][],S,E,n,m,t;
void floyd()
{
int i,j,k;
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
return ;
}
void init()
{
int i,j;
memset(dp,-,sizeof(dp));
for(i=;i<=;i++)
{
for(j=;j<=;j++)
dis[i][j]=inf;
dis[i][i]=;
}
}
int main()
{
//freopen("test.txt","r",stdin);
//freopen("ans.txt","w",stdout);
int w,i,j,Case=,a,b,v;
scanf("%d",&w);
while(w--)
{
init();
scanf("%d%d%d%d%d",&n,&m,&t,&S,&E);
S++;
E++;
for(i=;i<=n;i++)
scanf("%d",&p[i].c);
for(i=;i<=n;i++)
{
scanf("%d",&p[i].s);
p[i].num=i;
}
for(i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&v);
a++,b++;
dis[a][b]=dis[b][a]=min(dis[a][b],v);
}
floyd();
p[]=p[S];//将p[0]设为虚的起始点
sort(p+,p+n+);
for(i=;i<=n;i++)
{
for(j=p[i].c+dis[p[i].num][S];j<=t;j++)
dp[i][j]=p[i].s;
}
int k;
for(i=;i<=n;i++)
{
for(j=;j<i;j++)
{
if(p[i].s>p[j].s)
for(k=t;k>=p[i].c+dis[p[i].num][p[j].num]&&k>=;k--)
{
if(dp[j][k-p[i].c-dis[p[i].num][p[j].num]]!=-)
dp[i][k]=max(dp[i][k],dp[j][k-p[i].c-dis[p[i].num][p[j].num]]+p[i].s);
}
}
}
for(i=;i<=n;i++)
{
if(p[i].num==E)
break;
}
int ans=;
for(j=;j<=n;j++)
{
for(k=;k<=t;k++)
{
if(k+dis[p[j].num][E]>t)
break;
ans=max(ans,dp[j][k]);
}
}
printf("Case #%d:\n%d\n",++Case,ans);
}
return ;
}
hdu 4571 floyd+动态规划的更多相关文章
- UVa 104 - Arbitrage(Floyd动态规划)
题目来源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&pa ...
- floyd+动态规划 hdu-4571-Travel in time
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4571 题目大意: 有n个景点,每个点都有个游玩时间ci,游玩后得到的满意度si.给一个起点s和终点e ...
- hdu 六度分离 floyd
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 题意分析:比较简单的最短路算法,最后只需判断最远两点距离是否大于7即可. /*六度分离 Time ...
- 畅通工程续 -- HDU 1874 floyd
题目大意: 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. 思路: floyd算法模板题,这是一个牺牲空间换取时间的算法,本质是动态规划. AC代码: #include < ...
- hdu 1704 (Floyd 传递闭包)
Rank Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1596 floyd
find the safest road Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- [HDU 3535] AreYouBusy (动态规划 混合背包 值得做很多遍)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3535 题意:有n个任务集合,需要在T个时间单位内完成.每个任务集合有属性,属性为0的代表至少要完成1个 ...
- [HDU 1114] Piggy-Bank (动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114 简单完全背包,不多说. #include <cstdio> #include < ...
- [HDU 2955]Robberies (动态规划)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 题意是给你一个概率P,和N个银行 现在要去偷钱,在每个银行可以偷到m块钱,但是有p的概率被抓 问 ...
随机推荐
- Shell统计报表表格生成
基本需求 分析完数据后,一般需要将数据以附件的形式发送处理,这个已经在<>中有介绍,如何 用Python实现附件的发送. 但不是所有人都关心附件的内容,一般邮件中需要有些概要的信息,如附件 ...
- JSF 2 radio buttons example
In JSF, "h:selectOneRadio" tag is used to render a set of HTML input element of type " ...
- svn备份与恢复
公司把SVN服务器从windows迁移到linux,其主要步骤记录如下. windows上备份 "C:\Program Files\VisualSVN Server\bin\svnadmin ...
- Java线程池学习
Java线程池学习 Executor框架简介 在Java 5之后,并发编程引入了一堆新的启动.调度和管理线程的API.Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java ...
- C++中#include包含头文件带 .h 和不带 .h 的区别
C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...
- 转载JSON格式化工具
格式化工具地址 http://tool.liuxianan.com/
- Codeforces Round #245 (Div. 1) B. Working out (简单DP)
题目链接:http://codeforces.com/problemset/problem/429/B 给你一个矩阵,一个人从(1, 1) ->(n, m),只能向下或者向右: 一个人从(n, ...
- jeecms支持的freemaker标签大全
<@e.form id="jvForm" action="o_add.do"> <@e.text label="字段名" ...
- 33条C#、.Net经典面试题目及答案[zt]
33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如“.NET中类和结构的区别”.“ASP.NET页面之间传递值的几种方式?”,并简明扼要的给出了答案,希 ...
- HtmlAgilityPack相关网页
//多线程 http://www.cnblogs.com/jiangming/archive/2012/09/11/MultiThreadCallWebbrowser.html //替换Webbrow ...