摘要: 题意:一辆汽车在一张无向图中开告诉你每个城市加油的费用。每次给q个查询(起点,终点,油箱容量)问你最小花费是多少。思路:一道Dijkstra状态的题目。在这种最短路问题中一维的dis数组记录的信息往往不能很好的解决问题,所以我们要给dis数组增加维数来使每个状态唯一。这其实就是结合了动态规划的思想,然后我们在考虑每个状态能怎么转移(这其实就是单个结点从队列中弹出来的处理过程)这样一道题就做出来了。对于这道题,我们增加一维表示当前汽车的剩油量,然后每个状态有两种转移方式1.直接开去下一个节点2.加一格油。最后统计一下目标节点所有油量的花费最小值,就能得出答案了。代码如下: 1 #include 阅读全文
posted @ 2014-01-13 21:29 张小豪 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 积攒已久的题目了,果断前两星期怎么做做不对,隔一段时间一做就对了。题意:马里奥要求从结点1到a+b的最短路。前提是他有一种靴子能在任意距离小于l的结点之间飞(经过的路上必须为村庄,耗时为零),结点标号前a个为村庄,靴子只能用k次。思路:这道题用floyd初始化+Dijkstra+dp就搞定了。刷了一段时间最短路,这样的做法已经做过几遍了。floyd初始化任意两个可飞到的结点的距离。Dijkstra处理最短路只要在dis数组后加一维状态就可。每次转移的时候分两部分,一部分是不用靴子就和正常的Dij一样,在一种是根据初始化的距离判断能否用靴子。代码如下: 1 #include 2 #incl... 阅读全文
posted @ 2014-01-13 19:38 张小豪 阅读(469) 评论(0) 推荐(0) 编辑
摘要: 这次只做出来两道水题,真是太糟糕了。先挖个坑,到时候再来填吧。Problem ASereja and Dima思路:每次都会从两边去找一个最大的。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #define MP(a, b) make_pair(a, b)11 #define PB(a) push_back(a)12 13 using namespace std;14 15 typedef long long ... 阅读全文
posted @ 2014-01-13 02:05 张小豪 阅读(193) 评论(0) 推荐(0) 编辑