floyd+动态规划 hdu-4571-Travel in time

西安电子科技大学841学长经验分享(总成绩第三名) 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4571

题目大意:

有n个景点,每个点都有个游玩时间ci,游玩后得到的满意度si。给一个起点s和终点e,两个景点间有条无向边,权值为时间。从起点出发,在给定时间限制下,到达终点,问能获得的最大的满意值,只有游玩了景点才能获得该景点的满意值,并且上个游玩景点的满意度必须大于后一个游玩的景点满意度。

解题思路:

图上的dp.

见到图论就晕啊啊啊。先求出不游玩时,任意两点的到达时间,用floyd求。

dp[i][j]表示到达第i个点,用时为j时,能到达的最大的满意度。

本题的关键是先对每个景点的满意度从小到大排序,然后对于第i个景点枚举时间j(从大到小,因为一个景点只能游一次), 在枚举前面的i-1个景点,通过前面的满意度得出当前的满意度。转移方程还是很好写的。

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#define eps 1e-6
#define INF 0x1f1f1f1f
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
//#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/
#define Maxn 110
int dp[Maxn][310]; //dp[i][j]表示到达第i个点花了j时间的能获得的最大满意度
int dis[Maxn][Maxn]; //任意两点间的距离
int n,m;

struct Node
{
   int id,si,ci;
   friend bool operator < (const struct Node &a,const struct Node &b)
   {
      return a.si<b.si; //按满意度从小到大排序
   }
}node[Maxn];

void floy()
{
   for(int i=0;i<n;i++)
      for(int j=0;j<n;j++)
      {
         if(i==j)
            dis[i][j]=0; //不游玩的到达时间
         else
            dis[i][j]=INF;
      }
   int a,b,v;
   for(int i=0;i<m;i++)
   {
      scanf("%d%d%d",&a,&b,&v); //注意有重边
      dis[a][b]=dis[b][a]=min(dis[a][b],v);
   }

   for(int k=0;k<n;k++) //floyd 不断更新两点间的距离
      for(int i=0;i<n;i++)
         for(int j=0;j<n;j++)
         {
            dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
         }
   return ;
}

int main()
{
   int tt,s,e,t;
   int ca=0;

   scanf("%d",&tt);
   while(tt--)
   //while(~scanf("%d%d%d%d%d",&n,&m,&t,&s,&e))
   {
      scanf("%d%d%d%d%d",&n,&m,&t,&s,&e);
      for(int i=0;i<n;i++)
      {
         scanf("%d",&node[i].ci);
         node[i].id=i;
      }
      for(int i=0;i<n;i++)
         scanf("%d",&node[i].si);
      sort(node,node+n);
      floy();

      printf("Case #%d:\n",++ca);
      if(dis[s][e]>t) //起点不能到达终点或到达时间超过了
      {
         puts("0");
         continue;
      }
      memset(dp,-1,sizeof(dp));
      int ans=0;
      for(int i=0;i<n;i++) //初始化
      {
         if(dis[s][node[i].id]+node[i].ci<=t)
         {
            dp[node[i].id][node[i].ci+dis[s][node[i].id]]=node[i].si;
           // dp[node[i].id][dis[node[s].id][node[i].id]]=0;
         }
         if(t-dis[s][node[i].id]-node[i].ci>=dis[node[i].id][e])
            ans=max(ans,node[i].si);
      }

      for(int i=1;i<n;i++)
         for(int j=t;j>=0;j--)
         {
            for(int k=0;k<i;k++)
            {
               int tmp=j-node[i].ci-dis[node[k].id][node[i].id]; //注意是严格大于
               if(tmp>=0&&node[i].si>node[k].si&&dp[node[k].id][tmp]!=-1)
                  dp[node[i].id][j]=max(dp[node[i].id][j],dp[node[k].id][tmp]+node[i].si);
            }
            if(t-j>=dis[node[i].id][e]) //该点的所有时间都求完了
               ans=max(ans,dp[node[i].id][j]);
         }
      printf("%d\n",ans);
   }
   return 0;
}




中小公司无线组网实战:用一台H3C AC和普通三层交换,实现办公网AP统一管理 本文详细介绍了中小型企业如何利用H3C AC控制器与普通三层交换机实现无线AP统一管理的实战方案。通过VLAN规划、DHCP配置和AC控制器设置,构建经济高效的办公网络,解决信号覆盖和连接稳定性问题,特别适合50-200人规模的企业部署。 阅读详情

相关推荐

Utrust4701F与Utrust2700R读写器在银河麒麟系统的安装及测试步骤说明

Utrust4701F与Utrust2700R读写器支持银河麒麟系统,广泛应用会员管理、支付管理等领域。本文将重点介绍Utrust4701F与Utrust2700R读写器在银河麒麟系统的安装及测试步骤说明。以上方法适用于主流国产操作系统,如 优麒麟(UbuntuKylin)/ 中标麒麟(NeoKylin) / UOS(统信操作系统)/ 中兴新支点 / 红旗 linux(redflag linux)/ 普华 Linux(I-soft OS) / 威科乐恩 Linux(WiOS)等

华翔天诚科技 1833

HDU 4571——Travel in time(dp)

Bob厌倦了游戏,离开了Alice,独自一人去长沙,Yuelu山,世界之窗等是Bob想要游览的地方。但是他的时间很有限,他不能浏览它们全部。假设长沙有N个景点,Bob给每一个景点Si定义了一个满意值。如果他游览了这个经典,他的总满意值就会增加Si。Bob希望在有限的时间T里,他可以从景点S开始,选择性的游览一些景点,最终到达景点E,使得总满意值可以达到尽可能的最大。很明显游览一个景点同样需要一些时

char256 677

GR00TN1.7国内本地下载+模型下在+hugingface无法连接,本地模型下载

GR00TN1.7

alsj123456的博客 97

HDU-4571 Travel in time 动态规划

题意:给定N个点,每个点有一个停留所需的时间,和停留能够获得的满意度,有M条边,每条边代表着两个点走动所需的时间,现在问在规定的T时间内从指定的一点S到E能够获得的最大的满意度是多少?要求停留的点的满意度要依次上升。 解法:这次虽然一看就是个DP,但是两个端点的处理要格外的注意,因为两个端点均可以选择路过的方式,而不是停留,因此需要虚拟出两个端点,两个端点分别表示路过起点和终点,虚拟端点与其他节...

weixin_33794672的博客 158

TypeScript的安装与使用

TypeScript的安装与使用

qq_51589308的博客 600

【AI Agent系列】【阿里AgentScope框架】深入源码:Msg是如何转变成模型需要的Prompt形式的?多模态Prompt如何构建?

前面咱们学习AgentScope,在使用Agent来对话时,输入为一个 Msg 对象,不能是字符串,然后在Agent内部,会将Msg对象转换为模型接受的Prompt。那 AgentScope 如何根据 Msg 形成相应模型接收的Prompt结构的?如何使用 Msg 带入更多的参数,传递给大模型呢?

同学小张的博客 1534

HDU-4571 Travel in time (Floyd&&(DFS||DP))

解法一:Floyd+记忆化DFS 第一反应就是Floyd处理出任意两点间最短距离,然后dfs 结果没有记忆化TLE了好久,然后又往DP想,发现可解,不过还是觉得dfs能过,找了一些dfs解法的题解,发现大神都是加上记忆化(不加记忆化的剪纸根本没用,血的教训),并且添加虚拟起点和终点以消除特殊情况。 解法二:Floyd+DP 最后还是想用DP做一下,dp数组无脑初始化,又浪费好长时间找错 前面同解法一 dp[i][j]表示从起始点到i点并且参观了i点时,用时为j的最大满意度和 采用“我为人人”的方法进行

idealism_xxm的专栏 940

【100%通过率】华为od统一考试B卷【需要打开多少监视器】JAVA&Go 实现

某长方形停车场,每个车位上方都有对应监控器,当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时,监控器才需要打开:给出某一时刻停车场的停车分布,请统计最少需要打开多少个监控器

MISAYAONE的博客 1万+

HDU -4571--Travel in Time

各种细节坑死人 #include #include #include #include #include #include #include using namespace std; const int MAXN = 110; const int INF = 1<<28; struct node { int c,sa; int node_id; }p[MAXN]; int di

WoniuGe 650

YOLOv12 改进 | Backbone改进 3

将CSP中的简单拼接改为可学习的特征选择门控,动态决定哪些特征流向下一层,同样再写这篇。:相比静态CSP的固定50/50分割,门控机制可学习0.3:0.7等最优比例。在输入端加入轻量SR模块,对下采样后的特征进行超分恢复,提升小目标检测能力。(小目标): 从 0.51 AP → 0.63 AP (+24%):采用ESPCN的高效亚像素卷积,避免传统插值的信息损失。:从通道级(SE)到空间级(Spatial)的多粒度控制。:结合浅层细节和深层语义,恢复小目标的纹理信息。

u012133341的博客 841

温升试验详解

温升试验是电子设备可靠性验证的重要手段,用于评估器件在正常工作或极限条件下的热稳定性。试验通过测量器件表面或关键点温度与环境温度的差值(ΔT),判断是否存在过热风险。主要依据行业标准,采用热电偶、热像仪等设备测量稳态温度。热阻分析可建立温升与功耗的关系,指导器件选型、PCB热设计和散热结构优化。典型应用包括电源模块和LED电路测试。温升试验通过系统性热分析,能有效提升产品在高负载、高温环境下的可靠性和安全性,对现代小型化、高密度电子设备尤为重要。

硬核科技 1331

HDU - 4571 Travel in time 2013长沙邀请赛

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4571 题意:有n个景点,m条双向路,给出参观每个景点所需时间和获得的价值,给出走过每条路所需时间,给出起点和终点,你可以路过某个景点而不参观,但是你当前参观的景点必须要比之前参观过的景点价值要大,给出起点终点和规定的时间,问你能否在规定的时间内由起点走到终点,可以的话获得的最大价值是多少。 分析

canghai_wangzi的博客 404

使用Simulink对氢燃料电池与锂电池的混合储能系统进行建模

本文介绍了基于Simulink的氢燃料电池与锂电池混合储能系统建模与协同控制方法。系统通过氢燃料电池提供稳定能源,锂电池实现快速响应,结合DC-DC变换器和负载管理器实现动态调控。详细阐述了从模型创建、关键模块配置到控制器设计的完整流程,重点说明了功率分配算法和充放电控制策略的实现。通过仿真分析验证了系统在不同负载条件下的性能表现,包括响应速度、工作效率和稳定性等指标。该方案为新能源混合储能系统的设计与优化提供了实用指导,有助于提升系统可靠性和延长电池寿命。

amy_mhd的博客 314

hdu 4571 Travel in time(floyd+dp)

链接http://acm.hdu.edu.cn/showproblem.php?pid=4571 距离上的cost用floyd算 是否停留用dp求 最后遍历dp[i][j]搜索答案 #include #include #include using namespace std; typedef struct { int c,s,num; }Point; int g[105][105]

a709743744的博客 463

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

hdu 4571 Travel in time

Floyd + Spfa + dp。先用Floyd预处理出所有点对之间的最短路,然后考虑到始点和终点是必须经过的,并且可以不游玩,于是就不能用原来的始点和终点,我们考虑新加入原点和终点,并且原点花费时间和满意值都为0(这样保证不会对结果做出影响),终点花费时间为0,满意值大于满意值的最大值(保证如果可以到达原来终点一定可以到达新终点)。接下来就是从新建图了,新原点到旧原点的路程为0,新原点到别的点

ok_again的专栏 1357

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

hdu 4571 Travel in time (floyd+分组背包)

题意:在T

绝望的乐园 870

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

HDU 4571 Travel in time (SPFA 或 dp)

HDU 4571 大概题意:n个点( 解法: 容易看出应该用spfa和dp来解。关键时对visit和pass点的处理。 通过floyd预处理出visit每个点对之间的最小边消耗。然后,加一个超级源点和一个超级终点。超级源点负责pas点s能够到达的点,超级终点负责那些能越过e的点 由于visit的点的moneyp值必须严格升序所以也可以拓扑之后dp 不能用dij,因为本题时求最长

冰 1159

HDU - 4571 Travel in time (不错的dp)

点击打开链接思路:先用floyd跑出任意两点的最短路,然后用dp[i][k]=max(dp[i][k], dp[j][k+cost]])转移。dp[i][k]代表从原点到达i点在剩余时间为k的情况下,得到的最大S值。可以想象一下,假如答案是参观其中的n个点。那么答案的S值肯定是这n个点的s值总和,花费就是这n个点的花费加上路径上相邻两个点的最短路。所以dp更确切的含义是从原点到i点,剩余时间为k,...

du_lun的博客 227

HDU 4571 - Travel in time(Floyd+dijkstra+dp)

题目: http://acm.hdu.edu.cn/showproblem.php?pid=4571 题意: N个点M条边时限T,起点S终点E。 每个点都有其参观获得值以及花费,经过是可以选择参观或者是不参观,且下一个参观的地点价值比上一个要大。 M条无向边,每条边都有时间花费。 求出在时限内从起点到终点的所得最大值。 思路: 一次floyd,求出各点中间的最短路,为的是重新建

Halo 580

HDU4571 Travel in time

#include #include #include #include #include #include #include #include using namespace std; const int inf=1<<29; const int maxn=102;///城市数量 const int maxm=505;///时间花费 int T,n,m,t,s,e,cas=1;

shaonianguai 772

hdu4571 / 2013 ACM-ICPC长沙赛区全国邀请赛 G.Travel in time · Floyd + dp

题解 题意:n个景点m条路,每走过一条路需要花费 LLL 的时间,每个景点都有对应的满意度 SiS_iSi​ ,访问每个景点需要 CiC_iCi​ 的时间,要求在 TTT 时间内,选择一些满足满意值严格递增的景点参观(也可以路过不参观,路过没有满意值需求),问从景点 SSS 到景点 EEE 的满意度之和最大是多少 没有考虑到可能存在这么一个情况:先路过该点不参观,防止该点的满意度太高影响下一个点的...

Yubing792289314的博客 294

hdu 4571 Travel in time (Floyd+记忆化搜索)

Travel in time Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1853    Accepted Submission(s): 374 Problem Description   Bob gets t

Coding A World 877

HDOJ 4571 Travel in time

题意:给n个城市,m条路径,表示从a->b需要t时间,每个城市有一个满意度si,游览这个城市需要花费ti时间,若经过城市不游览则不需要花费时间,且后访问的城市的满意度必须比前一个城市高。已知起点与终点,求在花费T时间的时限内,能够获得的最大的满意度。 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4571 思路:先用floyd求出城市之间的最短距离,

luminous11的专栏 399

2013 长沙邀请赛 HDU 4571 Travel in time(dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4571 题意:给定n个城市,m条道路,每个城市的参观时间,参观后的满意度,如果参观完一个城市后,之后参观的满意度必须大于参观过的城市的最大满意度,给定起点和终点,给定时间上限,问能该时间内参观的最大满意度,并且最后停在终点。 思路:DP,先用floyd找出城市间的最短路,dp[i][j][k]表示当

Remilia's 1023

Hdu 4571 Travel in time(dp)

题目链接 Travel in time Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1898    Accepted Submission(s): 383 Problem Description   Bob ge

madaidao的专栏 443

HDU_4571_Travel in time(Floyd+记忆化)

类型:图论、动态规划 题意:         n点m边的无向图,每个点有时间权值和满足度权值。在T时间内,从起点S走到终点E。每个点可以选择路过,也可以选择进入,进入点之后增加满足度。要求进入点的满足度必须严格大于上一次进入的点的满足度。求总满足度的最大值。 分析: 一开始按照题目的意思进行BFS,怎么讲怎么搜,但是由于状态太多,导致MLE和TLE。 后来想到,一个点如果

Light_starlight 665
上一篇: 数学题-hdu-4569-Special equations
下一篇: dp hdu-4570-Multi-bit Trie
Accagain
博客等级 码龄14年 376粉丝 316原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值