poj 2728【Desert King】
摘要:我之前也没有搞过01规划,但是之前做过3621,3621这道题也用到了01规划,虽然我还是不太理解01规划,但是3621题解的推导过程给了我启示……∑cost[i]/∑len[i] <= ans∑cost[i] <= ans * ∑len[i]∑(cost[i] - ans * len[i]) <= 0当和小于0时说明ans需变小还有这一题目很自然就要用prim,题目只给了点的坐标和高度,而且点也不算太多,如果用Krustral要存的边会很多……而且第一个城市是首都,(there will be only one way to connect each village to
阅读全文
posted @
2012-08-30 12:43
Shirlies
阅读(182)
推荐(0) 编辑
poj 3613【Cow Relays】
摘要:首先看题解,看到的是floyd,然后就往floyd方向去想,想不咋通,之后就问了队长,队长解释了一下就清楚了这一题用的是floyd和二分的思想,如果只是floyd的思想就是求任意两点之间距离为k(1<=k<=N)条边的最短距离,然后在此基础上求k+1条边的最短距离…… 1 #include <cstdio> 2 #include <cstring> 3 4 const int maxlen = 1000+10; 5 int N,T,S,E; 6 int map[maxlen][maxlen]; 7 int sign[maxlen]; 8 int tmp[ma
阅读全文
posted @
2012-08-27 13:45
Shirlies
阅读(256)
推荐(0) 编辑
hdu 1502【Regular Words】
摘要:不是自己推出来的公式,看题解了才知道这个三维DP公式dp[i][j][k] = dp[i-1][j][k] + dp[i][j-1][k] + dp[i][j][k-1](i >= j >= k)一看到这个题目,我的反应竟然是卡特兰数(一个有n个X和n个Y组成的字串,且所有的部分字串皆满足X的个数大于等于Y的个数。以下为长度为6的dyck words:XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY),n<=60,即使不是卡特兰数,结果应该也会很大,所以要用到大数相加(真心的讨厌写大数相加相乘相除等的代码,磨蹭了些许时间,才写@_@,唉,什么时候自己写个有
阅读全文
posted @
2012-08-18 12:16
Shirlies
阅读(585)
推荐(0) 编辑
hdu 1422【重温世界杯】
摘要:就这样A了……我的思路大致是:获得生活费与花费的差(在纸上演练一下就清楚为什么了),这一题是求序列和要大于等于0的最长子序列,并且该序列的第一个值必须>=0,还有一个地方就是这是一个圆圈,即从第N个数可以回头转到第一个值,但是最多也就是转一圈,即将该序列浏览两遍,但是转到第一个值的条件是dp[n] > 0,因为只有最后一个dp值大于0的时候转到前面才有意义,试问,如果最后一个dp值小于等于0,都已经欠钱了,早就被踢出德国了……然后为了方便可以将dp[n]存在dp[0]里面……还有一个问题是浏览第一遍数组时,如果所得值已经大于n了,就没有必要继续了,给maxn直接赋值n就可以退出循环
阅读全文
posted @
2012-08-16 22:19
Shirlies
阅读(387)
推荐(0) 编辑
hdu 1224【Free DIY Tour】
摘要:如果从i->j有路的话,dp[j] = max(dp[j],dp[i]+value[j]),并记录下path[j],如果选择的是dp[i]+value[j],则path[j] = i;之后回溯就可以找到所有路径了……其实这一题可以用压缩版的数组(其实一维数组啦)存储是否有路径,可以节约一半的空间(因为一个地方只有到另外一个编号比它大的城市的路),为了方便我还是用的二维数组^_^代码如下: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 int dp[105]; 6
阅读全文
posted @
2012-08-16 20:54
Shirlies
阅读(221)
推荐(0) 编辑
hdu 1081【To The Max】
摘要:不知道0ms思路是咋样的,偶滴代码15ms……就是转换成一维数组,然后求最大子序列和……代码如下: 1 #include <cstdio> 2 #include <cstring> 3 4 int n; 5 int inp[105][105]; 6 int temp[105][105]; 7 8 int get_sum(int t[]) 9 {10 int dp[105];11 12 dp[0]= t[0];13 for(int i = 1;i < n;i ++)14 {15 if(dp[i-1]>= 0)16 dp[...
阅读全文
posted @
2012-08-15 17:35
Shirlies
阅读(168)
推荐(0) 编辑
hdu 1078【FatMouse and Cheese】
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1078人家说是简单题,我说是神题,这个就是大大滴差距\可怜神奇的DP+记忆化搜索只要将各个方向递归退栈后得到的最大值用dp[x][y](这里的最优就是各个方向上的最大值加上此处的cheese)记录下来,以后如果再次搜索到这个地方时可以直接返回该处的值……ps一句:看了别人的题解后才弄出来的……代码如下: 1 #include <cstdio> 2 #include <cstring> 3 4 int dp[105][105]; 5 int inp[105][105]; 6 int n,
阅读全文
posted @
2012-08-15 16:16
Shirlies
阅读(183)
推荐(0) 编辑
hdu 1025
摘要:啥也不说,就是求最长递增子序列,就说这一题的输出,偶服了,还要分复数和单数……囧死了……代码就不贴了……
阅读全文
posted @
2012-08-15 00:44
Shirlies
阅读(282)
推荐(1) 编辑
hdu 1978【How many ways】
摘要:搞了点搜索,IDA*那个启发函数太难找了,先放一放,来搞DP,至于DP的题目是根据http://www.cppblog.com/doer-xee/archive/2009/12/05/102629.html这个地方的内容来的,很全面……这一题还比较好搞……处理当前点,看当前点可达哪一些点……代码如下: 1 #include <cstdio> 2 #include <cstring> 3 4 const int mod = 10000; 5 int map[105][105]; 6 int dp[105][105]; 7 8 int main() 9 {10 int n,
阅读全文
posted @
2012-08-14 19:42
Shirlies
阅读(268)
推荐(0) 编辑
uva 110[The 3n + 1 problem]
摘要:看到《挑战编程》这本书,然后就试试做做上面的题目,之前已经在hdu上面过了这一题了,但是现在看到这一题,我是再想怎么可以运行更少的时间……这里用了一个数组,记录已经计算出的值,结果时间缩短了10倍但是我注释的地方不知道为什么会用问题,如果加上那一段就会RE~_~代码如下: 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 int vis[1000000+10]; 6 int get_value(int x) 7 { 8 if(vis[x] != 0) return vis[x];
阅读全文
posted @
2012-08-08 16:56
Shirlies
阅读(275)
推荐(0) 编辑
hdu 1885【Key Task】
摘要:广搜要记录方格里面不同状态时行走的步数注意当当前行走的步数大于记录的步数时要剪枝(当然,在记录方格不同状态时的值不为-1时)代码如下: 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 5 6 struct node 7 { 8 int x,y; 9 int step; 10 int state; 11 }; 12 char map[105][105]; 13 int R,C; 14 int sx,sy; 15 int used[1...
阅读全文
posted @
2012-08-05 00:01
Shirlies
阅读(227)
推荐(0) 编辑
hdu 2616【Kill the monster】
摘要:写的程序运行时间不给力~_~……我用二进制表示状态做的……代码中解释……代码如下: 1 #include <iostream> 2 using namespace std; 3 4 struct spell 5 { 6 int ai,mi; 7 }ss[12]; 8 int n,HP; 9 int minn;10 11 void dfs(int x,int hp)12 {13 if(hp <= 0)//当hp值要小于等于0时,查看x中有多少个1,即用了多少个spell14 {15 int res = 0;16 for(int i = 0...
阅读全文
posted @
2012-08-03 16:20
Shirlies
阅读(284)
推荐(0) 编辑