<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Call me Prophet]]></title><description><![CDATA[1924在国立广东大学]]></description><link>https://blog.youkuaiyun.com/ArthurFree</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ArthurFree]]></copyright><item><title><![CDATA[Sicily1031]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/42684899</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/42684899</guid><author>ArthurFree</author><pubDate>Tue, 13 Jan 2015 21:35:46 +0800</pubDate><description><![CDATA[这道题简直坑到爆...最后判断不可达情况的时候要先判断起点和终点是否一样再判断起点终点是否没被记录过，因为样例会出起点终点相同但之前没出现过的，这种情况下要输出0....


/*
 * Sicily1031Campus.cpp
 *
 *  Created on: 2015年1月13日
 *      Author: Prophet
 */
//邻接矩阵djistra
#include
#]]></description><category></category></item><item><title><![CDATA[Sicily1828Minimal]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/42679421</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/42679421</guid><author>ArthurFree</author><pubDate>Tue, 13 Jan 2015 17:34:50 +0800</pubDate><description><![CDATA[/*
 * Sicily1828Minimal.cpp
 *
 *  Created on: 2015年1月13日
 *      Author: Prophet
 */
#include
#include
#include
using namespace std;

const int MAX_M = 500+5;

int main(){
	int TestCase;
	scanf("%d",]]></description><category></category></item><item><title><![CDATA[Sicily1011动态规划]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/42678561</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/42678561</guid><author>ArthurFree</author><pubDate>Tue, 13 Jan 2015 16:42:30 +0800</pubDate><description><![CDATA[/*
 * Sicily1011Lenny'sLuckyLotto.cpp
 *
 *  Created on: 2015年1月13日
 *      Author: Prophet
 */
#include
#include
using namespace std;
const int MAX_N = 10+2;
const int MAX_M = 2000+10;

int main(){]]></description><category></category></item><item><title><![CDATA[一些二分题]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/38170251</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/38170251</guid><author>ArthurFree</author><pubDate>Sun, 27 Jul 2014 12:57:26 +0800</pubDate><description><![CDATA[POJ2976：
/*
 * POJ2976DroppingTests.cpp
 *
 *  Created on: 2014年7月25日
 *      Author: Prophet
 */
#include
#include
const int MAX_N = 1000+10;
#define eps 1e-6
using namespace std;

int n,k;
double a]]></description><category></category></item><item><title><![CDATA[POJ3258River Hopscotch]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/38169495</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/38169495</guid><author>ArthurFree</author><pubDate>Sun, 27 Jul 2014 12:33:58 +0800</pubDate><description><![CDATA[POJ 3258：
题意：在一段长为L的距离中（1—L），有N个点，去掉其中的M个，使得每个点之间的最小距离最大（包括第一个点和1点，以及第N个点和L）。
二分加贪心，解题思路：二分最小距离，每次二分得出的最小距离mid都丢进贪心里面判断是否满足：贪心的时候保留开始的1点，然后判断下一个点和前一个保留下来的点的距离是否比mid小，小的话就丢掉这个点。最后看一共丢了多少个点。如果丢的点比M多，证]]></description><category></category></item><item><title><![CDATA[POJ3255Roadblocks]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37884463</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37884463</guid><author>ArthurFree</author><pubDate>Wed, 16 Jul 2014 20:24:56 +0800</pubDate><description><![CDATA[1.        POJ3255Roadblocks
这道题求次短路径。我是按照《挑战程序设计竞赛》这本书的代码来写的，我就来解释一下这本书关于这道题的写法。
首先，这本书提到“到某个顶点v的次短路要么是到其他某个顶点u的最短路再加上u->v的边（显然u->v并不形成源点到v的最短路），要么是到u的次短路再加上u->v的边（显然这里u->v的边就是源点到v的最短路了）。”而另外一些博文提到先]]></description><category></category></item><item><title><![CDATA[POJ1182食物链 & POJ. 1161TheSuspects]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37690805</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37690805</guid><author>ArthurFree</author><pubDate>Fri, 11 Jul 2014 10:03:00 +0800</pubDate><description><![CDATA[1.        POJ1182食物链：
这道题是并查集中比较难的一道。并查集究其本身而言并不难（但是如果像算法导论那本书上证明一大堆的那就另论了）。按照我的理解，并查集对元素之间的关系就行分类、合并（不能解离）、查找，从而确定各元素之间的关系。因此，并查集主要用到四个函数：
1)        初始化：将每个元素的父根指向自己，即自己作为一个集合；设置自己的秩为0（秩为该节点高度的上界）。]]></description><category></category></item><item><title><![CDATA[POJ2342AnniversaryParty]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37606387</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37606387</guid><author>ArthurFree</author><pubDate>Wed, 09 Jul 2014 20:28:35 +0800</pubDate><description><![CDATA[一道基础的树形DP，为我们基本讲解出树形DP的特点。
按照我浅薄的理解，树形DP是把寻找最优算法放到树上进行，先是找到子根，然后往上递推回去，需要记录每个点的父根。
这道题中我采取的方法是用数组记录一个节点的父根，也可以用vector，vector比较适用于记录自己的多子根，输入的时候进行处理，i对应的father[i]的值就是其父根。因为初始化为0所以最后值为0的i就是整棵树的父根。

]]></description><category></category></item><item><title><![CDATA[POJ.3176.Cow Bowling]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37562219</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37562219</guid><author>ArthurFree</author><pubDate>Tue, 08 Jul 2014 12:11:51 +0800</pubDate><description><![CDATA[这道题属于比较简单的DP，对于每个点way[i][j]，其必然是经由way[i-1][j]或者way[i-1][j-1]而来的，因此设置way[i][j]数组，其值就是表示来到这点的最小距离。状态转移方程可知为：
 
way[i][j]+=std::max(way[i-1][j],way[i-1][j-1]);
 
然而本道题的关键在于使用动态数组，虽然本题的数据规模不要求，但与这道题完全]]></description><category></category></item><item><title><![CDATA[POJ.1185.炮兵阵地]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37544385</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37544385</guid><author>ArthurFree</author><pubDate>Mon, 07 Jul 2014 23:48:07 +0800</pubDate><description><![CDATA[这道题也是压缩状态的经典题，和铺瓷砖那道题相比，这道题明显难了很多，前前后后花了我3个小时，实在是智商拙计。
这道题主要运用了状态压缩的方法，在两个地方使用了压缩，首先是地形，其次是炮兵的布置。在输入中先对地形进行处理，还是用二进制法处理，然后转化为十进制压缩保存：

其次是对行内合理炮兵布置进行枚举，行内合理的布置要满足的条件是相邻两个跑步距离要大于两个格，这里要采取一种很神奇的位操作，(]]></description><category></category></item><item><title><![CDATA[POJ.2411. Mondriaan's Dream]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37506139</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37506139</guid><author>ArthurFree</author><pubDate>Mon, 07 Jul 2014 12:56:40 +0800</pubDate><description><![CDATA[这道题是压缩状态DP的经典题，经典到我百度这个题出了两三页的解题报告，但我看了前前后后快4个小时，还是不怎么明白，先把现在的思路写下。
题意的简单也奠定了这道题的经典性：给定一个m*n的面积，用2*1的瓷砖横贴或者纵贴铺满，不考虑对称性问有多少种铺法。在做这道题的时候第一次接触到“压缩状态DP”，按照我的理解，所谓的压缩状态DP就是把每种递推情况用一个更简洁（比如一个数）来表达，一个数推出另外的]]></description><category></category></item><item><title><![CDATA[Sicily. 1419. On the run(牛奶快递)]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37394675</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37394675</guid><author>ArthurFree</author><pubDate>Sun, 06 Jul 2014 22:40:14 +0800</pubDate><description><![CDATA[这道题有那么一点难度，主要在于设计出求解的方法。这道题有点像磁盘调度的最短路径算法（SJF）。其实问题有点变形，变成：怎样选择最短路径的算法似的路径最短。
解题之前说点题外话：我感觉这个地方有点迷糊，也就是说，一个数轴上给定若干个点，从其中某个点出发遍历所有的点所耗的时间，会因其选择遍历先后的次序有关。这个我想了一下觉得似乎不会因次序有关，如果真的是因次序有关，那么在操作系统中的SJF算法的基础]]></description><category></category></item><item><title><![CDATA[Sicily.1342.开心的金明&&Sicily.1146.采药]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37325765</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37325765</guid><author>ArthurFree</author><pubDate>Sun, 06 Jul 2014 13:49:35 +0800</pubDate><description><![CDATA[经典的DP题，没什么好说，记住模板就好]]></description><category></category></item><item><title><![CDATA[Sicily.1264. Atomic Car Race]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37321885</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37321885</guid><author>ArthurFree</author><pubDate>Sun, 06 Jul 2014 12:56:55 +0800</pubDate><description><![CDATA[一道挺简单的DP题。关键在于理解题意。这道题设了不少的语言难度在里面，要理解行驶时间的计算以及最短行驶时间的推导。
首先来看下行驶时间，这个很关键，我刚开始做的时候觉得这道题不知所云就是因为理解不了这里。其实这个计算是个幌子，题目中提到“The time torun an interval of one kilometer from x to x + 1 is given by the foll]]></description><category></category></item><item><title><![CDATA[Sicily.1001.Alphacode]]></title><link>https://blog.youkuaiyun.com/ArthurFree/article/details/37111343</link><guid>https://blog.youkuaiyun.com/ArthurFree/article/details/37111343</guid><author>ArthurFree</author><pubDate>Sat, 05 Jul 2014 23:31:46 +0800</pubDate><description><![CDATA[Sicily.1001.Alphacode
一道经典的DP题。一看题就去百度找答案了，找到不少博文是解这道题，但都只是把解决方法写出来，没有解释，那我来解释一下：
首先，解这道题的基本思路（不考虑各种极端情况）是：
一个字母码的解数=去掉最后一位的解数+去掉最后两位的解数
即递归方程为：
dp[i] = dp[i-1]+dp[i-2]
比如：“25114”的解数 = “2511”的解数]]></description><category></category></item></channel></rss>