﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Climber.pI的OI之路-随笔分类-动态规划</title><link>http://www.cppblog.com/Climber-pI/category/14906.html</link><description>Through the darkest dark，may we see the light.</description><language>zh-cn</language><lastBuildDate>Thu, 11 Aug 2011 00:21:09 GMT</lastBuildDate><pubDate>Thu, 11 Aug 2011 00:21:09 GMT</pubDate><ttl>60</ttl><item><title>Problem List (7.26 ~ 8.5)</title><link>http://www.cppblog.com/Climber-pI/archive/2011/08/05/152580.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Fri, 05 Aug 2011 12:51:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2011/08/05/152580.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/152580.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2011/08/05/152580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/152580.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/152580.html</trackback:ping><description><![CDATA[<p>7.26</p>
<p>最长公共子序列lcs, O(N^2)<br />f[i][j] = max{f[i-1][j], f[i][j-1], f[i-1][j-1]+1(if A_i==B_j)}<br />初始化f[_][0] = f[0][_] = 0</p>
<p>7.27</p>
<p>编辑距离edit, O(N^2)<br />f[i][j] = min(f[i][j-1] + 1, f[i-1][j] + 1, f[i-1][j-1] + !(A_i==A_j))<br />初始化f[i][0] = f[0][i] = i<br />*参考[这里]http://en.wikipedia.org/wiki/Levenshtein_distance<br />*状态转移过程中, 充分不一定最优, 必要才是最优; 事实上边界条件总有其具体意义<br />*[相关]http://www.matrix67.com/blog/archives/333</p>
<p>最短回文串palindrome[poj 1159], O(N^2)<br />1.套用lcs, O(N^2), 60<br />f[i][j] = max{f[i-1][j], f[i][j-1], f[i-1][j-1]+1(if A_i==B_j)}<br />初始化f[_][0] = f[0][_] = 0, n - f[n][n]即为答案<br />*利用滚动数组优化, 空间复杂度O(N), 80<br />*关键语句k = 1 - k, 注意在内层循环外<br />2.套用edit, O(N^2), 30<br />f[i][j] = min(f[i][j-1] + 1, f[i-1][j] + 1, f[i-1][j-1] + 2*!(A_i==A_j))、<br />初始化f[i][0] = f[0][i] = i, f[n][n]/2即为答案<br />3.O(N^2), 30<br />f[i,j]表示将Ai..Aj变为回文串的最小代价，则<br />f[i][j] = f[i+1][j-1] (若Ai=Aj)<br />&nbsp;&nbsp;&nbsp; min(f[i+1][j],f[i][j-1])+1 （若Ai&lt;&gt;Aj）<br />4.利用位运算优化<br /><a href="http://www.csse.monash.edu.au/~lloyd/tildeStrings/Alignment/86.IPL.html">http://www.csse.monash.edu.au/~lloyd/tildeStrings/Alignment/86.IPL.html</a></p>
<p>硬币找零coin[完全背包], O(N^2)<br />f[j] = min(f[j], f[j-c[i]]+1)<br />初始化f[0] = 0, f[1..T] = INT_MAX<br />*注意下标非零 和 INT_MAX的溢出</p>
<p>7.28</p>
<p>导弹拦截missile[LIS + 二分], O(NlogN)<br />(1)二分查找O(logn)<br />f[i] = max(f[j] + 1) (j &lt; i)<br />d[i] = min(f[k]) (f[k] == i)<br />易知d[i]单调, 因而可以利用二分查找降低复杂度, i最大值即LIS长度为t, 那么<br />i)&nbsp; f[i-1] &lt; k &lt;= f[i] (1 &lt;= i &lt;= t)<br />ii) 若k &gt; 任意f[], 则f[t+1] = k;<br />iii) 若!k, 则f[1] = k;<br />*例子参见[这里]http://www.matrix67.com/blog/archives/112<br />[代码实现]<br />//情况ii和iii需要单独处理<br />x = 1; y = t;<br />while (x &lt;= y){<br />&nbsp;m = (x + y)/2;<br />&nbsp;if (f[m-1] &lt; k &amp;&amp; k &lt;= f[m]) break;//对于最长上升子序列和最长不下降子序列判定条件不明???<br />&nbsp;//if (f[m-1] &lt; k &amp;&amp; k &lt;= f[m]) return m;<br />&nbsp;else if (k &gt; f[m]) x = m + 1；<br />&nbsp;else y = m - 1;<br />&nbsp;//return x;<br />}<br />*利用注释, 可以避免对情况ii的单独处理LIS的方案, 记录方案需要使用pre数组, 范例不知???<br />*需要注意的是, f数组给出的并非是一个<br />(2)最少链划分 = 最长反链长度(关于偏序集, 参见《组合数学》P73)<br />[Dilworth定理]令（X,&#8804;）是一个有限偏序集，并令m是反链的最大的大小。则X可以被划分成m个但不能再少的链。</p>
<p>最长不下降子序列lis[LIS + 二分], O(NlogN)<br />对[1..k-1][k+1..n]两个序列分别进行一次LIS即可.<br />*问题的关键之处在于第一次理解不彻底和浮躁, 以及对于困难程度的不合理估计.</p>
<p>7.29</p>
<p>加分二叉树tree[区间 + 记录方案], O(N^3), 20min<br />f[i][j] = max(f[i][k-1] * f[k+1][j] + A[k]) (i &lt;= k &lt;= j)<br />初始化f[i][i] = A[i], f[i+1][i] = 1<br />[记录方案]pa[i][j] = k, 递归即可, [边界]pa[i][j] == i 或者 j, 以及i == j的情况</p>
<p>整数划分separate[区间 + 记录方案], O(N^3), 2h<br />f[k][i]表示序列1..i分成k段的最大值<br />f[k][i] = max(f[k-1][j-1] * A[j][i])<br />pa[k][i] = j<br />初始化f[1][_] = A[1][_], 其他f[][] = -1<br />*注意等号情况同样需要更新<br />if (f[K][i] &lt;= f[K-1][k-1] * A[k][i])<br />&nbsp;f[K][i] = f[K-1][k-1] * A[k][i],<br />&nbsp;pa[K][i] = k; //记录方案<br />*将[pa[k][i], i]加入答案, 递归[1, pa[k][i]-1], [边界] k == 0<br />*在Win下使用long long占位符为"%I64d", 在Linux下占位符为"%lld", 考试中利用&lt;fstream&gt;避开占位符问题</p>
<p>凸多边形的三角剖分division[区间]<br />f[i][j] = max{f[i][k] + f[k][j] + w(i, j, k)} (i &lt; k &lt; j)<br />初始化1&lt;=i-j&lt;=2的f只为0, 其他为-1<br />*表达式中同时出现long long和int的话, 会自动转换为int<br />*只过了6个点, 原因不知 -&gt; 数据错误, 最后4个点output一样<br />*各种神牛们普遍指出没有考虑i&gt;j的情况 -&gt; 怎么写???</p>
<p>机器分配machine[区间], O(N^3)<br />f[i][j] = max(f[i-1][k] + A[i][j-k]) (0 &lt;= k &lt;= j)<br />初始化f[][] = 0, f[i][j] = max(f[i][j], A[i][j])<br />*注意读题"第i个公司分配j台机器的盈利", 不是分配第j台机器的盈利</p>
<p>装箱问题box[分组背包], O(N^2), 30min<br />f[i][j] = max{f[i-1][j], f[i-1][j-c[i][k]] + w[i][k]}<br />初始化f[][] = 0<br />*读题时注意变量的对应关系<br />*注意本题中背包不一定要装满</p>
<p>7.31</p>
<p>最长前缀prefix[判断性dp], O(kN), 70min<br />f[i] |= f[i - len[j]] &amp; check(i - len[j] + 1, j) (1 &lt;= i,j &lt;= n)<br />初始化f[] = 0, check(x,y)表示主串[x,x+len[y]-1]和前缀y是否相同<br />*弄错j和len[j], 注意方程的字母指代, 以及实现中的字符指针位置, 注意静态查错[30min]<br />*[8.4优化]把check函数直接写在循环中, 如果f[i] == 1直接break -&gt; 依旧超时三个点<br />*[8.5优化]i的上限为min(n, ans + 20), 更新f[i]的时候记录ans即可 -&gt; AC<br />8.1</p>
<p>关键子工程project[DAG最长路], 70min<br />f[i] = max(f[j] + w[i]) (G[j][i] == 1)<br />初始化f[i] = w[i]<br />记录方案, 利用f[i] == w[i] + f[j] (G[j][i] == 1)<br />*利用定义求拓扑排序, 输出方案可以利用队列将递归转化为迭代, 无解情况用flag标记(inq数组表示是否在队列中)<br />*在纸上写出关键部分的代码, 两倍行距(比如递推或者记忆化函数, 输出方案的函数)</p>
<p>8.2</p>
<p>三角蛋糕trigon[坐标dp], 130min<br />[做法1](需保留空格)<br />f_[i][j]表示以(i, j)为顶点的Rt&#9651;的最大边长<br />对于倒三角形,&nbsp;自右向左 f1[i][j] = min(f1[i+1][j], f1[i][j+1]) + 1<br />&nbsp;&nbsp;&nbsp;&nbsp;自左向右 f2[i][j] = min(f2[i+1][j], f2[i][j-1]) + 1<br />对于正三角形,&nbsp;自右向左 f1[i][j] = min(f1[i-1][j], f1[i][j+1]) + 1<br />&nbsp;&nbsp;&nbsp;&nbsp;自左向右 f2[i][j] = min(f2[i-1][j], f2[i][j-1]) + 1<br />初始化, f[][] = 0(A[][] = '#'), f[][] = 1(A[][] = '-'); min(f1[i][j], f2[i][j])^2的最大值即为答案<br />[做法2](不需保留空格)<br />f[i][j]表示以(i, j)为顶点的&#9651;的最大高度<br />对于倒三角形, f[i][j] = min(f[i-1][j], f[i-1][j+1], f[i-1][j+2]) + 1<br />对于正三角形, f[i][j] = min(f[i+1][j], f[i+1][j-1], f[i+1][j-2]) + 1<br />初始化, f[][] = 0(A[][] = '#'), f[][] = 1(A[][] = '-'); min(f[i][j])^2即为答案<br />*输入需保留空格, 卡了30min(排除ASCII为10或13的字符即可)<br />*没有考虑正方向, 大约2h时对照std发现<br />*有两个点数据错误, 对照std后发现std仅当横坐标为奇数是考虑倒三角形, 横坐标为偶数时考虑正三角形, 而题目中无此限制<br />*学习利用批处理对拍的写法<br />@echo off<br />:again<br />gen<br />trigon<br />trigon_me<br />fc trigon.out trigon_me.out &gt; nul<br />if not errorlevel 1 goto again</p>
<p>选课course[树形dp]<br />[做法1]多叉转二叉<br />f[i][j]表示以i为根节点的树中, 选择j门课<br />f[i][j] = max(f[i.r][j], f[i.l][k] + f[i.r][j-k-1] + i.v) (0&lt;=k&lt;j)<br />初始化f[][] = 0<br />*无法记录方案 -&gt; gXX表示比较困难<br />[做法2]泛化物品<br />??? -&gt; 想撞墙 -&gt; 需要学习</p>
<p>通向自由的钥匙key[树形dp], 150min, zoj 2280<br />f[i][j]表示以i为根节点的数, 花费能量为j时可以拿到的最多的钥匙数<br />f[i][j] = max(f[i.r][j], f[i.l][k] + f[i.r][j-k-i.c] + i.v) (o&lt;=k&lt;=j-i.c)<br />初始化f[][] = -1, 边界处理f[i][j] = 0(i&lt;=0 || j&lt;0)<br />*记录各点邻接矩阵, 利用dfs构造树(注意处理后取消邻接), 并多叉转二叉 -&gt; 30min<br />*对于f[i.r][j]不必在记忆化搜索函数中遍历所有兄弟, 只遍历最近的即可<br />*注意读题, 出发点为1, i.c和i.v非负 -&gt; 1.5min<br />*注意静态查错, 如记忆化搜索中dp(i, j)打成f(i, j)的情况<br />*觉得比较晕的时候等一下再调题, 可以先干点别的, 这样可以减少时间的浪费</p>
<p>警卫安排security[树形dp], 100min<br />[状态]<br />f[i][0]表示以i为根节点, 并在i安排警卫的最小花费<br />f[i][1]表示以i为根节点, i的父节点已安排警卫的最小花费<br />f[i][2]表示以i为根节点, i的子节点已安排警卫的最小花费<br />[方程]<br />f[i][0] = &#931;min(f[i.son][0], f[i.son][1], f[i.son][2]) + i.v<br />f[i][1] = &#931;min{f[i.som][0], f[i.son][2]} (i不是树的根节点)<br />f[i][2] = min{&#931;min{f[i.son][0], f[i.son][2]}(i.son != k) + f[k = i.son][0]}<br />[初始化]<br />对于叶节点, f[i][0] = i.v, f[i][1] = 0, f[i][2] = i.v<br />对于其他值, f[][] = -1<br />*对于根节点的寻找, 利用prev[i]记录i的前驱, 若!prev[i], 则i为树根<br />*结合批处理和makedata以及小范围暴力程序, 可以有效地避免各种错误及极端情况 -&gt; 需要学习搜索<br />*对于这类题目, 思考的关键在于分类写出方程, 并注意方程的边界条件(类似:tyvj 没有上司的舞会)<br />*对于树形dp, 存在两种类型; 一种是对于加权路径长度限制, 另一种则是求加权最值</p>
<p>8.4</p>
<p>青蛙的烦恼frog[区间dp]<br />初看是最小生成树问题, 但是此题有几个特别的性质:<br />1.以1号荷叶为起点, 终点不定<br />2.遍历荷叶的最短路径是一条链<br />3.题目给出的坐标顺序是一个顺时针方向的多边形<br />4.最短路径不相交(画一个四边形, 利用三角形性质可以观察到)<br />根据性质1和2, 容易得出O(N^3)的方程, 很明显会超时<br />f[i][j] = min(f[k][j-1] + d[i][k]) (i!=k)<br />-f[i][j]表示以i为起点, 长度为j的最短路径, 初始化f[i][1] = 0<br />进而考虑性质3和4, 因而对于点1, 只能选择相邻的点2和n, 可以得到O(N^2)的方程<br />f[i][j][0] = min{f[i+1][j-1][0] + d[i][i+1], f[i+1][j-1][1] + d[i][i+j-1]}<br />f[i][j][1] = min{f[i][j-1][1] + d[i+j-1][i+j-2], f[i][j-1][1] + d[i+j-1][i]}<br />-f[i][j][0]表示以i为起点, 长度为j的最短路径, f[i][j][1]表示以i为终点, 长度为j的最短路径, 初始化f[][1][] = 0<br />-一个实现上的小优化, 保证d[i][j](i&lt;j)<br />*注意静态查错, 区别变量名, 思考算法的过程应该长于调试的过程<br />*修正了测试点6</p>
<p>火车进站train[线性dp], 70min<br />1.M &lt;= 3 -&gt; 可以分类讨论<br />2.只存在一条轨道, M只能决定轨道的长度 -&gt; 如果同时在轨道中, i在j前的必要条件是i.s&lt;=j.s和i.t&lt;=j.t<br />3.小站工作人员可以任意安排这些火车进站的先后排列 -&gt; 记忆化搜索<br />4.小站允许几辆火车同时进站或出站 -&gt; 所有条件都可取等号<br />M = 1, f[i] = max(f[j] + 1)&nbsp;&nbsp;&nbsp;&nbsp;(i.t &lt;= j.s)<br />M = 2, f[i][j] = max(f[j][k] + 1)&nbsp;&nbsp;(i.t &lt;= k.s)<br />M = 3, f[i][j][k] = max(f[j][k][l] + 1)&nbsp;(i.t &lt;= l.s)<br />初始化f = 0, 利用vis记录是否计算过, 各下标互不相等<br />*枚举过程中注意剪枝, 利用i!=j和i.s&lt;=j.s,i.t&lt;=j.t逐层处理即可<br />*[读题]明确要求的是什么, 存在哪些条件, 写list<br />*[未验证]先对以进站时间为第一关键字, 出站时间为第二关键字进行快排, 然后直接递推, 下标满足i &lt; j &lt; k &lt; l</p>
<p>快餐问题meal[资源分配(不妨认为是背包)dp + 贪心优化] -&gt; 类似, usaco 3.4.4 rocker<br />f[k][i][j]表示k条生产线生产i个汉堡, j个薯条时生产饮料的最大值, p[k][i][j]表示第k条生产线, 其他同.<br />f[k][i][j] = max{f[k][i-ki][j-kj] + p[k][i][j]}<br />sum[i] = sum[i-1] + A[i]<br />初始化f[1][i][j] = p[1][i][j], f[2..n][i][j] = -1, 复杂度O(N*100^4)<br />几个优化<br />1.注意到每种物品总数小于100, 最大产量的上限是lim = min(100/a, 100/b, 100/c, sum[n]/(a*p1+b*p2+c*p3))<br />2.为了避免数组越界, i的上限是min(lim*a, sum[n]/p1), j的上限min(lim*b, (A[k] - i*p1)/p2);<br />ki的上限min(i, A[k]/p1), kj的上限min(j, (A[k] - ki*p1)/p2) -&gt; 对于逗号右边, 其实就是ki*p1+kj*p2&lt;=A[k]<br />3.将程序中的min/max用if语句替代<br />4.对于每一套生产线, 尽量成套生产<br />[反例]<br />1 1 1<br />2 3 7<br />3<br />15 16 17<br />贪心可得最大值为3, 实际上15 = 7 + 3 + 3 + 2, 16 = 7 + 3 + 2 + 2 + 2, 17 = 7 + 7 + 3, 最大值为4;<br />利用优化1和2可以过5个测试点, 优化3可以进一步优化时间常数, 利用优化4可以过9个测试点<br />AC程序参见[此文]http://hi.baidu.com/zijingningmeng/blog/item/2761617e2afe7ae32e73b3b3.html<br />*调试过程中的主要问题是边界溢出(没有区分是否计算过), 变量名写错<br />*网上有说法表示去掉每种物品的件数限制后, 题目变成网络流 -&gt; gXX证伪<br />*比赛的话, 不妨小数据(n&lt;5)DP, 大数据(n&gt;=5)贪心, 这样应该可以得到超过一半的分数</p>
<p>卡车更新问题truck, O(N^2), 1h<br />f[i][k]表示第i年某车已使用了k年<br />f[i][k] = max{f(i+1, 1) + R[0] - U[0] - C[k], f(i+1, k+1) + R[k] - U[k]}<br />初始化f[][] = -1, 边界条件f[i][k] = 0(i&gt;N,k&gt;K), 利用记忆化搜索实现<br />记录方案利用bool型数组prev[i][j][k]记录是否购买新车, 递归即可<br />*尽可能不换新车<br />*利用样例构造树, 写出状态即可得到方程<br />*测试点1存在等价方案, 已修正数据(可能需要Special Judge)<br />*f[i][j][k]中i和k可以唯一确定状态, 因而可以去掉中间1维</p>
<p>选课course[树形dp + 记录方案], 多叉转二叉实现<br />f[i][j]表示以i为根节点的树中, 选择j门课<br />f[i][j] = max(f[i.r][j], f[i.l][k] + f[i.r][j-k-1] + i.v) (0&lt;=k&lt;j)<br />初始化f[][] = 0<br />[记录方案]<br />利用print(i, j)递归, vis[i][j]表示是否已遍历, [边界]i&#8712;[1, m], j&#8712;[1, n]<br />right[i][j]表示f[i][j]是否等于f[i.r][j]<br />prev[i][j] = k表示f[i][j]由f[i.l][k],f[i.r][j-k-1]推得, 这时需记录p[i] = 1<br />从1到n判断p[i]直接输出即可.</p>
<p>8.5</p>
<p>广场铺砖问题floor[状压dp], 2h<br />f[i][S] = &#931;f[i-1][S'] (S由S'推得)<br />初始化f[1][0] = 1, f[h+1][0]即为答案<br />对于每个f[i-1][S']利用dfs(当前行i, 当前行状态s1, 下一行状态s2, 当前行指针k)寻找S<br />if(!(s2 &amp; 1&lt;&lt;k) &amp;&amp; !(s2 &amp; 1&lt;&lt;(k+1)))<br />&nbsp;dp(i, s1, s2, k + 2);//存在连续两个空位, 即横放<br />dp(i, s1, s2 ^ (1&lt;&lt;(k)), k + 1);//对当前位取反, 即竖放<br />利用int保存每一位的摆放方式, 1表示当前行被上一行占用, 0表示当前行未被占用<br />[边界]k = 0, 递归过程中k &gt; w则退出</p>
<p>硬木地板floor2[状压dp]<br />f[i][S] = &#931;f[i-1][S'] (S由S'推得)<br />初始化f[1][0] = 1, f[h+1][0]即为答案<br />*实现无能, 最终放弃 -&gt; 我应该去学位运算优化BFS -_-<br />*鱼牛《状态压缩》理解不能, NOI导刊朱全民文章code不全.<br />*耗时最长的题目往往不是表面上的难题, 而是那些被简单估计的难题</p><img src ="http://www.cppblog.com/Climber-pI/aggbug/152580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2011-08-05 20:51 <a href="http://www.cppblog.com/Climber-pI/archive/2011/08/05/152580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Problem List (7.13 ~ 7.20)</title><link>http://www.cppblog.com/Climber-pI/archive/2011/07/21/151551.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Thu, 21 Jul 2011 07:55:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2011/07/21/151551.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/151551.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2011/07/21/151551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/151551.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/151551.html</trackback:ping><description><![CDATA[<div>7.13<br />p1057 金明的预算方案[分组背包], 1.5h<br />f[v] = max{f[v], f[v - c[i][j]] + w[i][j]}<br />*注意读题，主件的编号和物品编号相同，这里调了1h<br />*注意逗号的使用<br /><br />@Ural p1018 Binary Apple Tree[树形], 1.5h{大量参考题解}<br />f[i][j] = max(f[tree[i].l][k] + f[tree[i].r][j-k-1] + tree[i].v)<br />*初始化中使用-1标记未计算(避免重复0)<br />*递归建树 -&gt; 寻找儿子的过程可利用邻接表优化[未验证]<br />*记忆化搜索f[t][q]初始化为0, 根节点值最后计算, 注意特殊情况0<br />*特别注意, 把题目中的 边权 转换为 点权, 以及q的相关变化<br /><br />7.15<br />#p1051 选课[树形DP], 1.5h<br />f[i][j] = f[tree[i].r][j] (左子树空)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f[tree[i].l][k]+f[tree[i].r][j-k-1]+tree[i].v (左子树非空)<br />*多叉树转二叉树 -&gt; 左儿子, 右兄弟<br />if (!left[a]) tree[a].l = i;<br />else tree[left[a]].r = i;<br />left[a] = i;<br />**记忆化搜索过程为什么不能直接返回int -&gt; 实验证实会引起错误, 原因不明 -&gt; 盲目合并语句所致<br />&nbsp;&nbsp; &nbsp;if (f[i][j] || i == 0 || j &lt;= 0) return 0;<br />&nbsp;&nbsp; &nbsp;应为<br />&nbsp;&nbsp; &nbsp;if (i == 0 || j &lt;= 0) return 0;<br />&nbsp;&nbsp; &nbsp;if (f[i][j]) return f[i][j] ;<br />&nbsp;&nbsp; &nbsp;-&gt; 合并此类控制边界语句应注意返回值<br />**泛化背包做法 http://archive.cnblogs.com/a/2091585/<br /><br />p1087 sumsets[完全背包+统计方案数], 60min<br />f[i][j] = f[i-1][j] + f[i][j-c[i]] (f[0][0] = 1)<br />一开始盲目列表找递推式, 尝试无果. 后发现题目本意即完全背包问题, 2^k是物体, 实现时注意降维.<br />*统计方案总数问题递推式中max改为+, 注意f[0] = 1<br />*此类问题注意高精度的实现 或者 mod(注意题目中要求, 如本题9位精度)<br />*另一种方程 f[i] = f[i-1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (i=2k+1) -&gt; 已通过观察得到<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f[i-1] + f[i/2](i=2k)&nbsp;&nbsp; -&gt; 动机是什么?<br /><br />p1079 数字三角形3[坐标DP], 30min<br />f[i][j] = max(f[i+1][j], f[i+1][j+1]) + A[i][j] (0 &lt; j &lt;= i &lt;= n/2)<br />通过分析可知, 指定点(n/2, n/2)前(i, i)必取, 而其后和一般数字三角做法相同, 终点为f[n/2][n/2]<br />故最终答案&#931;f(i,i)_(0 &lt; i &lt; n/2) + f[n/2][n/2]<br />*坐标问题注意分析起点和终点的要求<br /><br />p1084 数字三角形4[坐标DP], 10min<br />(x, y)前: f1[i][j] = max(f1[i-1][j-1], f1[i-1][j]) + A[i][j] (0 &lt; j &lt;= i &lt;= x)<br />(x, y)后: f2[i][j] = max(f2[i+1][j], f2[i+1][j+1]) + A[i][j]<br />分析可知, (x, y)前顺推, 指定终点为(x, y), 起点必然为(1, 1), (x, y)后逆推, 指定终点为(x, y)<br />故最终答案为f1[x][y] + f2[x][y] - A[x][y]<br /><br />p1076 数字三角形2[判定性DP], 30min<br />f[i][j][(k+A[i][j])%100] = f[i+1][j][k] | f[i+1][j+1][k]<br />通过增加维度转化为判定性问题, 由于取模所以k的顺序不确定, 因而用坐标来控制顺序<br /><br />7.16<br /><br />#p1048 田忌赛马[贪心 + DP], 1.5h<br />1.O(N + NlogN), [题解来自网络]思想是这样的, 先把各组马的速度从大到小排序, 然后用田忌的马顺序与齐威王的马比较<br />if（田忌的马快）比较下一对马；<br />else&nbsp; if（田忌的马慢）用田忌最慢的马和齐威王的这匹马赛<br />else{<br />&nbsp;&nbsp;&nbsp; 从未进行比赛的速度小的马开始从后往前比<br />&nbsp;&nbsp;&nbsp; if（田忌的马快）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里是必须的，否则如果是90 73 71 和 90 70 70 ，那么没有这个是<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 继续往前比&nbsp;&nbsp;&nbsp;&nbsp; //2-1,有了的话就是2+0，非常重要<br />&nbsp;&nbsp;&nbsp; else 用这匹马和刚才跑平的齐威王的马比&nbsp; &nbsp;<br />//总之原则就是如果这匹马不能赢，就让他和比他快很多的马比，这样保持速度较快的马<br />}<br />*while循环条件, f1 &lt;= r1<br />2.O(N^2 + NlogN), 来自:http://hi.baidu.com/lyltim/blog/item/57fccd1153ea851eb9127ba9.html<br />[贪心分析]<br />1、如果田忌剩下的马中最强的马都赢不了齐王剩下的最强的马，那么应该用最差的一匹马去输给齐王最强的马。<br />2、如果田忌剩下的马中最强的马可以赢齐王剩下的最强的马，那就用这匹马去赢齐王剩下的最强的马。 <br />3、如果田忌剩下的马中最强的马和齐王剩下的最强的马打平的话，可以选择打平或者用最差的马输掉比赛。<br />[DP做法]<br />f[i,j]=max{f[i-1,j]+g[n-(i-j)+1,i],f[i-1,j-1]+g[j,i]}<br />其中g[i,j]表示田忌的马和齐王的马分别按照由强到弱的顺序排序之后，田忌的第i匹马和齐王的第j匹马赛跑所能取得的盈利<br /><br />#p1402 乌龟棋[路径DP], 1.5h<br />f[i][j][k][l] = max(f[i-1][j][k][l], f[i][j-1][k][l], f[i][j][k-1][l], f[i][j][k][l-1]) + A[i+2j+3k+4l+1]<br />以卡片数为阶段, 状态f[i][j][k][l]表示还剩下每种牌各多少张时得到的最大值, 注意起始位置<br />*卡了1h因为被05的过河和08的传纸条限制思维, 认为以所在位置为阶段, 想对空间降维<br />*[降维条件]状态各维度存在等量关系, 因而可减少时间复杂度, 但是不能改变空间复杂度<br /><br />#p1052 没有上司的舞会[树形DP], 1.5h<br />f[i][0] = &#8721;max{f[j][0], f[j][1]} (j&#8712;i.son), i不参加<br />f[i][1] = &#8721;f[j][0] + tree[i].v&nbsp;&nbsp; (j&#8712;i.son), i参加<br />[边界]若i为叶节点, f[i][0] = 0, f[i][1] = tree[i].v<br />前半个小时写完了多叉转二叉, 证明了left[]的必要性. <br />*状态设计问题: 没有区分i参加和不参加的情况, 并认为f[i]由f[j](不取i, j是i的儿子)和f[k](取i, k是i的孙子)推得<br />*叶节点的初始化, 对于f[i][]求和而非取最大值, 选取根节点而非叶节点(需要两个数组映射)<br />*由于30min时方程考虑不周, 导致多次修正, 因而卡了1h. 务必要先写出正确方程.<br /><br />7.18<br /><br />p1134 CCR的中考之考前计划[模拟], 50min<br />语文题, 题目描述问题很大, 浪费了0.5h, google了一个std之后得到正确题意. 题目是类似beads的模拟题, 将环从某处打断, 使得两端科目类型相同的天数最多.寻找相同科目的条件A[j+1] = 'w' || A[j+1] = A[i].<br />*环状问题的处理方法: 2n-1, 在本题中双方向同时进行不妨3n-2<br /><br />#p1088 treat[区间DP], 20min<br />f[i][j] = max{f[i+1][j] + A[i] * (n+i-j), f[i][j-1] + A[j] * (n+i-j)} (0 &lt; i &lt; j &lt;= n)<br />f[i][j]表示[i, j]未取时的最大值, 初始化f[i][j] = A[i] * n, 以长度l为阶段, 故 j = i+l-1<br />*考虑第k次取数, k = n - (i-j+1) + 1(包括这次), 昨天没想到这点卡了很久<br />*在网上找到了另外一种设置状态的方法, 设f[i][j]是取i个数, 左边取j个, 方程：<br />f[i][j] = max(f[i - 1][j - 1] + i * A[j], f[i - 1][j] + i * A[n - (i - 1 - j)])<br />-&gt; 猜想动机: 存在等式 前 + 后 = 总数, 状态的设置都是为了描述着三个量. <br /><br />agirnet[Krusal], 20min<br />复习并查集实现的Krusal<br /><br />p1307 联络员[Krusal],50min<br />必选边先使用set[find(e[i].u)] = find(e[i].v)合并, 并记录权和, 然后按一般的Krusal做即可.<br />*使用stdlib.h的qsort间接排序失败, 原因不知(20min)<br />*注意此时k++不能并入下一行语句中, 否则++k和k值不同导致输入错误:<br />&nbsp;&nbsp; &nbsp;++k,<br />&nbsp;&nbsp; &nbsp;scanf("%d%d%d", &amp;must[k].u, &amp;must[k].v, &amp;must[k].w);<br />&nbsp;&nbsp; &nbsp;<br />7.20<br /><br />p1113 魔族密码[LIS模型], 40min, 6WA<br />f[i] = max{f[j] + 1} (A[j]为A[i]前缀, 1 &lt;= j &lt; i)<br />*注意最大值不一定在f[n]中, 需要对f[1] -&gt; f[n]进行循环检查, 卡了30min<br /><br />p1187 小飞侠的游园方案[0/1背包], 15min<br />f[i][j] = max(f[i-1][j], f[i-1][j - c[i]] + w[i])<br />存在可能未装满的情况, 故循环检查f[n][]即可<br /><br />#p1190 积木城堡[背包DP], 1.5h, 6WA<br />f[k][j] = f[k][j - w[i]] (j - w[i] &gt;= 0)<br />类似分组背包的做法, 记录每组物品的所有可能值, 若f[1..k][V]同时为true, 则V为最值. 也可以在读入时, 循环检查每组物品的可能值.<br />*注意读题, 尤其是各种数据范围, 不要重复去年第二题!!!<br />*读入时注意MAXn+1, 留意-1的情况; 显然答案不会超过所有城堡的最小高度(而非最大).<br />*题目中并没有强调按顺序取积木, 因而一开始打了模拟, 之后手贱去Google. 对于这类问题, 在提交后若发现则应继续思考. 此外不要给题目增加条件.<br />**注意这类确定各组物品所有可能值写法 和 最优值写法的区别<br />*一组测试数据:<br />5<br />87 76 65 54 32 21 23 -1<br />64 75 25 63 76 23 75 13 64 23 -1<br />09 78 76 46 32 45 23 -1<br />23 34 45 -1<br />12 34 23 -1<br /><br />p1213 嵌套矩形[LIS模型/DAG最长路], 1h, 9WA<br />(1)f[i] = max(f[j] + 1) (rect[i]可嵌套rect[j])<br />*初始化f[] = 1; 初始化为0, 输出+1会导致错误, 原因不知.<br />-&gt; 另一种写法(by Ylen): f[0] = 0, f[] = INT_MAX;<br />*注意题目没有强调矩形间存在顺序, 因而存在后效性. 易知面积小的矩形不会嵌套面积大的矩形, 因而以面积为关键字对rect进行间接排序.<br />(2)f[i] = max(f[j] + 1 | (i,j)&#8712;G)<br />若rect[i]可嵌套rect[j], 则建立一条从i到j的边, 求最长路即可</div><img src ="http://www.cppblog.com/Climber-pI/aggbug/151551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2011-07-21 15:55 <a href="http://www.cppblog.com/Climber-pI/archive/2011/07/21/151551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Problem List (5.7)</title><link>http://www.cppblog.com/Climber-pI/archive/2011/05/07/145912.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Sat, 07 May 2011 12:26:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2011/05/07/145912.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/145912.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2011/05/07/145912.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/145912.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/145912.html</trackback:ping><description><![CDATA[<p>5.7<br>p1004 滑雪[2d最长下降子序列]<br>无思路.</p>
<p>p1005 采药[简单01背包], 调了1.5h<br>[spec,1d] f[j] = max{f[j], f[j - c[i]] + w[i]}, 能够有效避免f[i][j]中i的指代问题<br>*2d写法须注意f[i][j] = f[i-1][j]的值传递<br>&nbsp;for (i = 1; i &lt;= n; i++)<br>&nbsp;&nbsp;for (j = T; j &gt;= 1; j--)<br>&nbsp;&nbsp;&nbsp;if (j &gt;= t[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;f[i][j] = max(f[i - 1][j], f[i - 1][j - t[i]] + w[i]);<br>&nbsp;&nbsp;&nbsp;else f[i][j] = f[i - 1][j];</p>
<p>p1003 找啊找啊找GF[加强版01背包], 调了1h<br>读题分析后发现是0/1背包模型, 时间需要单独处理.(一开始认为要记录路径, 其实不用这么麻烦)<br>f[m][r] = max{f[m][r], f[m - rmb[i]][r - rp[i]] + 1}<br>t[m][r] = max{t[m][r], f[m - rmb[i]][r - rp[i]] + time[i]}, 如果f[m]..和f[m-rmb[i]]..相等,注意更新t[m][r]<br>[补]写rocker的时候想到一种方法，对于dp，维度往往是需要表示的量数-1，所以关于方程状态的表示可以从时间复杂度、空间复杂度、需要表示的量数综合考虑.此题中加上time的话，显然爆时间，然后从这个方向思考方程.<br><br>p1015 公路乘车[线性dp]<br>f[i] = max{f[i - k] + A[k]} (1 &lt;= k &lt;= 10)</p>
<p>p1011 传纸条[双线程dp + 时间降维]<br>注意读题, 题目中的来回等价为两次同时的单向过程<br>f[x1][y1][x2][y2] = max{f[x1-1][y1][x2-1][y2], f[x1-1][y1][x2][y2-1], f[x1][y1-1][x2][y2-1], f[x1][y1-1][x2-1][y2]}+A[x1][y1]+A[x2][y2]<br>注意每个数if and only if取一次, f[x1][y1][x2][y2] -= A[x1][y1](x1=x2&amp;&amp;y1=y2)</p>
<p>p1014 乘法游戏[区间dp]<br>无思路</p>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/145912.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2011-05-07 20:26 <a href="http://www.cppblog.com/Climber-pI/archive/2011/05/07/145912.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>USACO 4.1.1 Nuggets</title><link>http://www.cppblog.com/Climber-pI/archive/2010/10/19/130467.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Tue, 19 Oct 2010 09:05:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/10/19/130467.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/130467.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/10/19/130467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/130467.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/130467.html</trackback:ping><description><![CDATA[<p>重启usaco.<br><br>抽象出模型,可以发现是一个简单的完全背包问题,复杂度O(N^2+VN).需要考虑几种特殊情况:<br>(1)无解<br><strong>当且仅当n个数中有一个数为1.</strong><br>(2)惟一解<br><strong>需要确定的是体积v的最大值.</strong>题解中是最大的两个数的最小公倍数,程序中使用最大数的平方,<span style="COLOR: red"><strong>证明方法不知.</strong></span><br>(3)无限解<br><strong>n个数不互质<br></strong><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img id=Codehighlighter1_0_41_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_41_Open_Text.style.display='none'; Codehighlighter1_0_41_Closed_Image.style.display='inline'; Codehighlighter1_0_41_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_41_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_41_Closed_Text.style.display='none'; Codehighlighter1_0_41_Open_Image.style.display='inline'; Codehighlighter1_0_41_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_41_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_41_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>ID:&nbsp;liuyupa1<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>PROG:&nbsp;nuggets<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>LANG:&nbsp;C++<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img id=Codehighlighter1_73_75_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_75_Open_Text.style.display='none'; Codehighlighter1_73_75_Closed_Image.style.display='inline'; Codehighlighter1_73_75_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_73_75_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_75_Closed_Text.style.display='none'; Codehighlighter1_73_75_Open_Image.style.display='inline'; Codehighlighter1_73_75_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;w[</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_73_75_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_73_75_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,&nbsp;f[</span><span style="COLOR: #000000">66000</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_89_91_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_89_91_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_104_344_Open_Image onclick="this.style.display='none'; Codehighlighter1_104_344_Open_Text.style.display='none'; Codehighlighter1_104_344_Closed_Image.style.display='inline'; Codehighlighter1_104_344_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_104_344_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_104_344_Closed_Text.style.display='none'; Codehighlighter1_104_344_Open_Image.style.display='inline'; Codehighlighter1_104_344_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;p[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_104_344_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_104_344_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">13</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">19</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">23</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">29</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">31</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">37</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">41</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">43</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">47</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">53</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">59</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">61</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">67</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">71</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">73</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">79</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">83</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">89</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">97</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">101</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">103</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">107</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">109</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">113</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">127</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">131</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">137</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">139</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">149</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">151</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">157</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">163</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">167</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">173</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">179</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">181</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">191</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">193</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">197</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">199</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">211</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">223</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">227</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">229</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">233</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">239</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">241</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">251</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_372_404_Open_Image onclick="this.style.display='none'; Codehighlighter1_372_404_Open_Text.style.display='none'; Codehighlighter1_372_404_Closed_Image.style.display='inline'; Codehighlighter1_372_404_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_372_404_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_372_404_Closed_Text.style.display='none'; Codehighlighter1_372_404_Open_Image.style.display='inline'; Codehighlighter1_372_404_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;swap(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y)</span><span id=Codehighlighter1_372_404_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_372_404_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;k;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id=Codehighlighter1_427_450_Open_Image onclick="this.style.display='none'; Codehighlighter1_427_450_Open_Text.style.display='none'; Codehighlighter1_427_450_Closed_Image.style.display='inline'; Codehighlighter1_427_450_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_427_450_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_427_450_Closed_Text.style.display='none'; Codehighlighter1_427_450_Open_Image.style.display='inline'; Codehighlighter1_427_450_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;max(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)</span><span id=Codehighlighter1_427_450_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_427_450_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">y&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;x&nbsp;:&nbsp;y;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img id=Codehighlighter1_462_1174_Open_Image onclick="this.style.display='none'; Codehighlighter1_462_1174_Open_Text.style.display='none'; Codehighlighter1_462_1174_Closed_Image.style.display='inline'; Codehighlighter1_462_1174_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_462_1174_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_462_1174_Closed_Text.style.display='none'; Codehighlighter1_462_1174_Open_Image.style.display='inline'; Codehighlighter1_462_1174_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()</span><span id=Codehighlighter1_462_1174_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_462_1174_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">fin,&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">fout;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fin&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">nuggets.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fout&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">nuggets.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n,&nbsp;i,&nbsp;j;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fscanf(fin,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">n);<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;fscanf(fin,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">w[i]);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_666_805_Open_Image onclick="this.style.display='none'; Codehighlighter1_666_805_Open_Text.style.display='none'; Codehighlighter1_666_805_Closed_Image.style.display='inline'; Codehighlighter1_666_805_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_666_805_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_666_805_Closed_Text.style.display='none'; Codehighlighter1_666_805_Open_Image.style.display='inline'; Codehighlighter1_666_805_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">54</span><span style="COLOR: #000000">;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_666_805_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_666_805_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(w[i]&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;p[j]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;t</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img id=Codehighlighter1_753_802_Open_Image onclick="this.style.display='none'; Codehighlighter1_753_802_Open_Text.style.display='none'; Codehighlighter1_753_802_Closed_Image.style.display='inline'; Codehighlighter1_753_802_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_753_802_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_753_802_Closed_Text.style.display='none'; Codehighlighter1_753_802_Open_Image.style.display='inline'; Codehighlighter1_753_802_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(t&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;n)&nbsp;</span><span id=Codehighlighter1_753_802_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_753_802_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fout,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;p[j]);<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(w[i]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;w[j])&nbsp;swap(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">w[i],&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">w[j]);<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_916_962_Open_Image onclick="this.style.display='none'; Codehighlighter1_916_962_Open_Text.style.display='none'; Codehighlighter1_916_962_Closed_Image.style.display='inline'; Codehighlighter1_916_962_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_916_962_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_916_962_Closed_Text.style.display='none'; Codehighlighter1_916_962_Open_Image.style.display='inline'; Codehighlighter1_916_962_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(w[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_916_962_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_916_962_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fout,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;p[j]);<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;w[n]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">w[n];&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">w[i]&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;max(f[j],&nbsp;f[j</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">w[i]]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">w[i]);<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;w[n</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">w[n];<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;f[i]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;i)&nbsp;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fout,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;i);<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/130467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-10-19 17:05 <a href="http://www.cppblog.com/Climber-pI/archive/2010/10/19/130467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NOIp 2005 过河</title><link>http://www.cppblog.com/Climber-pI/archive/2010/10/08/129084.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Fri, 08 Oct 2010 13:54:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/10/08/129084.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/129084.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/10/08/129084.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/129084.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/129084.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: Georgia">线性dp，但是范围很变态. = =<br><br>30%的方程很容易想到:<br>[状态] f[i]表示从0到i点最少踩到的石子数, stone[i]表示i点有无石子;<br>[方程]<strong> f[i] = max{f[i-j] + stone[i]} (S&lt;=j&lt;=T)</strong><br>[初始化] f[0] = 0, 其他赋值为无限大.<br><br>在实现的时候需要把方程变化为 f[i+j] = max{f[i] + stone[i+j]}，不然在[1,S]会出现很诡异的结果.<br>&nbsp;<br>由于m远远小于l，整个序列上的石子非常稀疏.所以可以减少状态.但是目前对此还是有些不解.<br>某种思路是，将石子间距大[1,2,..,9,10]=2520的逐次减至小于2520.注意要在收尾增加0和l两个"石子"，这样计算新的l较为方便.</span><br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;MAXN&nbsp;1000000;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_97_99_Open_Image onclick="this.style.display='none'; Codehighlighter1_97_99_Open_Text.style.display='none'; Codehighlighter1_97_99_Closed_Image.style.display='inline'; Codehighlighter1_97_99_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_97_99_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_99_Closed_Text.style.display='none'; Codehighlighter1_97_99_Open_Image.style.display='inline'; Codehighlighter1_97_99_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;L[</span><span style="COLOR: #000000">200000</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_97_99_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_97_99_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img id=Codehighlighter1_118_120_Open_Image onclick="this.style.display='none'; Codehighlighter1_118_120_Open_Text.style.display='none'; Codehighlighter1_118_120_Closed_Image.style.display='inline'; Codehighlighter1_118_120_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_118_120_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_118_120_Closed_Text.style.display='none'; Codehighlighter1_118_120_Open_Image.style.display='inline'; Codehighlighter1_118_120_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;f[</span><span style="COLOR: #000000">200000</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_118_120_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_118_120_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,&nbsp;stone[</span><span style="COLOR: #000000">110</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_136_138_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_136_138_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img id=Codehighlighter1_162_184_Open_Image onclick="this.style.display='none'; Codehighlighter1_162_184_Open_Text.style.display='none'; Codehighlighter1_162_184_Closed_Image.style.display='inline'; Codehighlighter1_162_184_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_162_184_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_162_184_Closed_Text.style.display='none'; Codehighlighter1_162_184_Open_Image.style.display='inline'; Codehighlighter1_162_184_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;min(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)</span><span id=Codehighlighter1_162_184_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_162_184_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;x&nbsp;:&nbsp;y;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_209_267_Open_Image onclick="this.style.display='none'; Codehighlighter1_209_267_Open_Text.style.display='none'; Codehighlighter1_209_267_Closed_Image.style.display='inline'; Codehighlighter1_209_267_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_209_267_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_209_267_Closed_Text.style.display='none'; Codehighlighter1_209_267_Open_Image.style.display='inline'; Codehighlighter1_209_267_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;swap(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)</span><span id=Codehighlighter1_209_267_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_209_267_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;stone[x];<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;stone[x]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;stone[y];<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;stone[y]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;k;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img id=Codehighlighter1_279_855_Open_Image onclick="this.style.display='none'; Codehighlighter1_279_855_Open_Text.style.display='none'; Codehighlighter1_279_855_Closed_Image.style.display='inline'; Codehighlighter1_279_855_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_279_855_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_279_855_Closed_Text.style.display='none'; Codehighlighter1_279_855_Open_Image.style.display='inline'; Codehighlighter1_279_855_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()</span><span id=Codehighlighter1_279_855_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_279_855_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;l,&nbsp;S,&nbsp;T,&nbsp;M,&nbsp;i,&nbsp;j;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d%d%d%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">l,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">S,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">T,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">M);<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;M;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">stone[i]);<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;stone[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;M;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;M;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(stone[i]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;stone[j])&nbsp;swap(i,&nbsp;j);<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;stone[</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">M]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;l;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img id=Codehighlighter1_541_632_Open_Image onclick="this.style.display='none'; Codehighlighter1_541_632_Open_Text.style.display='none'; Codehighlighter1_541_632_Closed_Image.style.display='inline'; Codehighlighter1_541_632_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_541_632_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_541_632_Closed_Text.style.display='none'; Codehighlighter1_541_632_Open_Image.style.display='inline'; Codehighlighter1_541_632_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;M;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_541_632_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_541_632_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(stone[i]&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;stone[i</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2520</span><span style="COLOR: #000000">)&nbsp;stone[i]&nbsp;</span><span style="COLOR: #000000">-=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2520</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;M)&nbsp;L[stone[i]]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;stone[M</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;l;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;f[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MAXN;&nbsp;f[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;l;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img id=Codehighlighter1_751_829_Open_Image onclick="this.style.display='none'; Codehighlighter1_751_829_Open_Text.style.display='none'; Codehighlighter1_751_829_Closed_Image.style.display='inline'; Codehighlighter1_751_829_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_751_829_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_751_829_Closed_Text.style.display='none'; Codehighlighter1_751_829_Open_Image.style.display='inline'; Codehighlighter1_751_829_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;S;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;T;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_751_829_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_751_829_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">j;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;l)&nbsp;k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;l;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[k]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;min(f[k],&nbsp;f[i]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">L[i]);<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;f[l]);<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/129084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-10-08 21:54 <a href="http://www.cppblog.com/Climber-pI/archive/2010/10/08/129084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NOIp 2003 加分二叉树</title><link>http://www.cppblog.com/Climber-pI/archive/2010/10/05/128667.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Tue, 05 Oct 2010 03:10:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/10/05/128667.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/128667.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/10/05/128667.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/128667.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/128667.html</trackback:ping><description><![CDATA[树<span style="FONT-FAMILY: Georgia">形DP，需要记录方案，并注意空树的情况.</span><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">[状态]f[i][j]从结点i到j的最大加分值</span><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">[方程]</span><span style="FONT-WEIGHT: bold; FONT-FAMILY: Georgia">f[i][j] = max{f[i][k-1]*f[k+1][j]+a[k]} <span style="COLOR: red">(i&lt;=k&lt;=j)</span></span><br style="FONT-FAMILY: Georgia"><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">实现方程的时候循环顺序非常关键:</span><span style="FONT-WEIGHT: bold; FONT-FAMILY: Georgia">结点数由小到大循环</span><span style="FONT-FAMILY: Georgia">.否则会出现需要的值未计算的情况.</span><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">记录方案可以用一个数组d[i][j]记录k，然后递归寻找方案并记录.</span><br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;1</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;stdio.h&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;2</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;iostream&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;3</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">using</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">namespace</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;std;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;4</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;f[35][35]&nbsp;=&nbsp;{0},&nbsp;d[35][35]&nbsp;=&nbsp;{0},&nbsp;ans[35]&nbsp;=&nbsp;{0},&nbsp;t&nbsp;=&nbsp;0;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;5</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">void</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;print(</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;start,&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;end){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;6</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(start&nbsp;&gt;&nbsp;end)&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">return</span><span style="COLOR: #000000; FONT-FAMILY: courier new">;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;7</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(start&nbsp;==&nbsp;end)&nbsp;{ans[++t]&nbsp;=&nbsp;start;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">return</span><span style="COLOR: #000000; FONT-FAMILY: courier new">;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;8</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;ans[++t]&nbsp;=&nbsp;d[start][end];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;9</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;print(start,&nbsp;d[start][end]-1);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">10</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;print(d[start][end]+1,&nbsp;end);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">11</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">12</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;main(){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">13</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;n,&nbsp;a[35]&nbsp;=&nbsp;{0},&nbsp;i,&nbsp;j,&nbsp;k,&nbsp;l;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">14</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;n);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">15</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">16</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;a[i]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">17</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][i-1]&nbsp;=&nbsp;1;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">18</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][i]&nbsp;=&nbsp;a[i];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">19</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">20</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(l&nbsp;=&nbsp;2;&nbsp;l&nbsp;&lt;=&nbsp;n;&nbsp;l++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">21</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">22</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(k&nbsp;=&nbsp;i;&nbsp;k&nbsp;&lt;=&nbsp;i+l-1;&nbsp;k++){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">23</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;i+l-1;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">24</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(f[i][j]&nbsp;&lt;&nbsp;f[i][k-1]*f[k+1][j]&nbsp;+&nbsp;a[k]){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">25</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j]&nbsp;=&nbsp;f[i][k-1]*f[k+1][j]&nbsp;+&nbsp;a[k];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">26</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[i][j]&nbsp;=&nbsp;k;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">27</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">28</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">29</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;f[1][n]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">30</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;print(1,&nbsp;n);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">31</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;t;&nbsp;i++)&nbsp;printf("%d&nbsp;",&nbsp;ans[i]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">32</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;ans[t]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">33</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">34</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000"></span></div>
<br><br>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/128667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-10-05 11:10 <a href="http://www.cppblog.com/Climber-pI/archive/2010/10/05/128667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NOIp 2006 金明的预算方案</title><link>http://www.cppblog.com/Climber-pI/archive/2010/10/05/128662.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Tue, 05 Oct 2010 02:11:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/10/05/128662.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/128662.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/10/05/128662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/128662.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/128662.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: Georgia">题目中附件不超过2个，因而主附件存在4种不同的存取情况，可以转化为分组背包问题.</span><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">[状态]f[k][v]表示添加前k组物品，剩余空间为v时的最大值</span><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">[方程]</span><span style="FONT-WEIGHT: bold; FONT-FAMILY: Georgia">f[k][v] = max{f[k-1][v], f[k-1][v-c[i]]+w[i]}</span><br style="FONT-FAMILY: Georgia"><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">注意循环顺序.(参见《背包九讲》)</span><br style="FONT-FAMILY: Georgia"><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">需要注意的问题(2次WA):</span><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">1.仔细读题，确定编号对应的物品.</span><br style="FONT-FAMILY: Georgia"><span style="FONT-FAMILY: Georgia">2.注意到方程中的参数非负(背包类问题需注意).</span><br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;1</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;stdio.h&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;2</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">string</span><span style="COLOR: #000000; FONT-FAMILY: courier new">.h&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;3</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;iostream&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;4</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">using</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">namespace</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;std;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;5</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;c[65][4],&nbsp;w[65][4],&nbsp;f[32000],&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">set</span><span style="COLOR: #000000; FONT-FAMILY: courier new">[70]&nbsp;=&nbsp;{0};<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;6</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;max(</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;b){</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">return</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;a&nbsp;&gt;&nbsp;b&nbsp;?&nbsp;a&nbsp;:&nbsp;b;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;7</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;main(){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;8</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;n,&nbsp;m,&nbsp;v,&nbsp;p,&nbsp;q,&nbsp;i,&nbsp;j,&nbsp;t&nbsp;=&nbsp;0;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;9</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fout&nbsp;=&nbsp;fopen("budget.out",&nbsp;"w");<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">10</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;memset(c,&nbsp;-1,&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">sizeof</span><span style="COLOR: #000000; FONT-FAMILY: courier new">(c));<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">11</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;memset(w,&nbsp;-1,&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">sizeof</span><span style="COLOR: #000000; FONT-FAMILY: courier new">(w));<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">12</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;memset(f,&nbsp;0,&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">sizeof</span><span style="COLOR: #000000; FONT-FAMILY: courier new">(f));<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">13</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d",&nbsp;&amp;n,&nbsp;&amp;m);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">14</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;i++){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">15</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;v,&nbsp;&amp;p,&nbsp;&amp;q);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">16</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;0;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">17</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(!q)&nbsp;{<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">18</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[++t][0]&nbsp;=&nbsp;v;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">19</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[t][0]&nbsp;=&nbsp;v*p;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">20</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">set</span><span style="COLOR: #000000; FONT-FAMILY: courier new">[i+1]&nbsp;=&nbsp;t;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">21</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">22</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">else</span><span style="COLOR: #000000; FONT-FAMILY: courier new">{<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">23</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;=&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">set</span><span style="COLOR: #000000; FONT-FAMILY: courier new">[q];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">24</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(w[q][1]&nbsp;==&nbsp;-1){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">25</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000; FONT-FAMILY: courier new">//printf("dgfdgds\n");<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">26</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #008000; FONT-FAMILY: courier new"></span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[q][1]&nbsp;=&nbsp;c[q][0]&nbsp;+&nbsp;v;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">27</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[q][1]&nbsp;=&nbsp;w[q][0]&nbsp;+&nbsp;v*p;&nbsp;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">28</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">29</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">else</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(w[q][2]&nbsp;==&nbsp;-1){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">30</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[q][2]&nbsp;=&nbsp;c[q][0]&nbsp;+&nbsp;v;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">31</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[q][2]&nbsp;=&nbsp;w[q][0]&nbsp;+&nbsp;v*p;&nbsp;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">32</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c[q][3]&nbsp;=&nbsp;c[q][1]&nbsp;+&nbsp;v;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">33</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w[q][3]&nbsp;=&nbsp;w[q][1]&nbsp;+&nbsp;v*p;&nbsp;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">34</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">35</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">36</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">37</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;t;&nbsp;i++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">38</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(v&nbsp;=&nbsp;n;&nbsp;v&nbsp;&gt;=&nbsp;0;&nbsp;v--)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">39</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;4;&nbsp;j++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">40</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(c[i][j]&nbsp;!=&nbsp;-1&nbsp;&amp;&amp;&nbsp;v-c[i][j]&nbsp;&gt;=&nbsp;0){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">41</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[v]&nbsp;=&nbsp;max(f[v],&nbsp;f[v-c[i][j]]+w[i][j]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">42</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">43</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;f[n]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">44</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">45</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000"></span></div>
<br><br>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/128662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-10-05 10:11 <a href="http://www.cppblog.com/Climber-pI/archive/2010/10/05/128662.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dp札记</title><link>http://www.cppblog.com/Climber-pI/archive/2010/10/03/128437.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Sun, 03 Oct 2010 04:23:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/10/03/128437.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/128437.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/10/03/128437.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/128437.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/128437.html</trackback:ping><description><![CDATA[<p>记录写过的dp题目，并分类，尝试总结出某类题目的一般模型.</p> <p>(题目前打*的未编程验证)</p> <h3>【线性模型】</h3> <p><span style="font-family: georgia">Tyvj 1049 最长不下降子序列问题 [</span><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px" class="Apple-style-span"><span style="font-family: georgia"><strong>O(n^2)</strong> [还存在基于二分查找的O(nlogn)算法]]</span></span></span></p> <ul> <li><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px" class="Apple-style-span">[状态] f[i]表示从1到i的最长不下降子序列. <strong>最大值需更新.</strong></span></span></li> <li><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px" class="Apple-style-span">[方程] <strong style="font-family: georgia">if(a[j]&lt;=a[i]) f[i] = max{f[j]} (0&lt;j&lt;i, 1&lt;i&lt;=n)</strong></li></ul></span></span> <p>NOIp 2004 合唱队形 [<strong>O(n^2)</strong>, 双向最长上升子序列]</p> <ul> <li><span style="font-family: georgia">[方程] <strong>f[i] = max{f[j]}+1 , 枚举k(0&lt;=k&lt;=n).</strong></span><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 21px; font-family: verdana, sans-serif; font-size: 14px" class="Apple-style-span"></li></ul></span></span> <p>Rqnoj 164 最长公共子串 [记录方案 子串连续 O(n^2)]</p> <ul> <li>[状态] f[i][j]表示 子串A第i个字符 和 子串B第j个字符 前 公共子序列长度</li> <li>[方程] <strong>f[i][j] = f[i-1][j-1]+1(a[i]=b[j],<font color="#ff0000">a[i-1]=b[j-1]</font>)|max{f[i-1][j],f[i][j-1]}</strong> </li></ul> <p>UVa 111/10405&nbsp; [最长公共子序列问题,O(n^2). 可以使用滚动数组降至O(n).] <ul> <li>[状态] f[i][j]表示 子串A第i个字符 和 子串B第j个字符 前 公共子序列长度</li> <li>[方程] <strong>f[i][j] = f[i-1][j-1]+1(a[i]=b[j])|max{f[i-1][j],f[i][j-1]}</strong></li></ul> <p>UVa 507 [最大连续和,O(n).]</p> <ul> <li>[状态] f[i]表示当前子序列和(非负)</li> <li>[方程] <strong>f[i]=max{f[i-1]+a[i], a[i]},递推过程中需更新最大值.</strong></li></ul> <h3> 【矩阵模型】</h3> <p>*UVa 10285 滑雪 [记忆化搜索,最长下降子序列二维版本]</p> <ul> <li>[状态] f[i][j]表示从(i,j)开始的最长下降子序列长度.</li> <li>[方程] <strong>f[i][j] = max{f[i-1][j], f[i][j-1], f[i+1][j], f[i][j+1]}+1(f[i][j]&gt;f[i-1][j]..)</strong></li></ul> <p>UVa 108</p> <ul> <li>最大矩阵和，O(n^3)，方程不会. 最大连续和的二维版本.</li></ul> <p>NOIp 2000 方格取数 O(n^4)</p> <ul> <li>[状态] f[i][j][k][l]表示两人分别到(i,j)、(k,l)所取过的数的和.G[i][j]表示方格里的数.</li> <li>[方程] <strong>f[i][j][k][l] = max{f[i-1][j][k-1][l], f[i-1][j][k][l-1], f[i][j-1][k-1][l], f[i][j-1][k][l-1]}+G[i][j]+(i==k&amp;&amp;j==l ? 0 : G[k][l])</strong></li></ul> <p>NOIp 2008 传纸条</p> <blockquote> <p><strong>(1) O(n^4)</strong></p></blockquote> <ul> <li>[状态] f[x1][y1][x2][y2] 表示从出发点分别到(x1,y1)、(x2,y2)取的最大值.G[x][y]表示该格的数.</li> <li>[方程] <strong>f[x1][y1][x2][y2] = max{f[x1-1][y1][x2-1][y2],f[x1-1][y1][x2][y2-1],f[x1][y1-1][x2-1][y2],f[x1][y1-1][x2][y2-1]}+G[x1][y1]+G[x2][y2](如果位置不重复)</strong></li> <li>[一个重要优化] 显然有<strong>y2=x1+y1-x2(y2&gt;0),</strong>因而时间复杂度可以降到<strong>O(n^3).</strong>Cena显示总用时从近4s降到近0.3s，效果明显.</li></ul> <blockquote> <p><strong>*(2) O(n^3)</strong></p></blockquote> <ul> <li>[状态] f[p][x1][x2],p表示经过的格子数.</li> <li>[方程] <strong>f[p][x1][x2]=max{f[p-1][x1-1][x2-1],f[p-1][x1-1][x2],f[p-1][x1][x2-1],f[p-1][x1][x2]}+G[x1][p-x1]+G[x2][p-x2](如果位置不重复)</strong></li></ul> <p>USACO 5.3.4/3.3.4 [矩阵dp,O(n^2)]</p> <ul> <li>[状态] f[i][j]表示以(i,j)为右下角的正方形最大边长</li> <li>[方程] <strong>f[i][j] = min{f[i-1][j], f[i-1][j-1], f[i][j-1]}+1 (0&lt;=i,j&lt;n)</strong></li> <li>[预处理] 若G[i][j]=1则f[i][j]=1.</li></ul><strong></strong> <h3>【背包问题】</h3> <p>USACO 3.3.2  <ul> <li>[状态] f[a1][a2][a3][a4][a5]为买a1件物品1,a2件物品2,a3件物品3,a4件物品4,a5件物品5时，所需的最少价格</li> <li>[方程] <strong>f[a1][a2][a3][a4][a5] = min{f[a1-p[i][1][a2-p[i][2][a3-p[i][3][a4-p[i][4]][a5-p[i][5]+p[i][0]}</strong> (0&lt;i&lt;=s, ak-p[i][k]&gt;=0,p[i][0]是优惠后的价格)</li> <li>[边界条件] f[0][0][0][0][0]=0;</li> <li>USACO官方解法很有启发性，用最短路，把每种状态[a1][a2][a3][a4][a5]（a1件物品1,a2件物品2,a3件物品3,a4件物品4,a5件物品5）看成一个点，则至多7776个点，而每个优惠就是一条边，则至多105条边。 接下来就是求[0,0,0,0,0]到目标状态的最短路，用Dijkstra(Heap优化)即可.</li></ul> <p>USACO 3.1.2 [完全背包问题, O(n)或O(n^2).]</p> <ul> <li>[状态] f[i][j]表示放入第i个物体后剩余体积为j</li> <li>[方程] <strong>f[i][j] = f[i-1][j] + f[i][j-c[i]]+w[i]</strong></li></ul> <p>USACO 3.1.6 [完全背包问题,O(n).]</p> <ul> <li>[状态] f[i]表示凑成i分邮资的最少邮票数.</li> <li>[方程] <strong>f[i] = min{f[i-v[j]]+1} (i-v[j] &gt;= 0, 0&lt;=i&lt;n, f[0] = 0).</strong></li></ul> <p>USACO 2.3.4</p> <ul> <li>[状态] f[i,j]表示前i种货币构成j的方法数，用c[i]记录货币的面值.</li> <li>[方程]<strong> f[i,j]=f[i-1,j]; 不用第i种货币 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f[i,j]=f[i-1,j]+f[i,j-c[i]] 用第i种货币，j&gt;=c[i]</strong></li></ul> <h3>【树形】</h3> <p>USACO 2.3.2</p> <ul> <li>[状态] f[i,j]表示用i个点组成深度最多为j的二叉树的方法数，则：</li> <li>[方程] <strong>f[i,j]=∑(f[k,j-1]×f[i-1-k,j-1])(k∈{1..i-2})</strong>&nbsp;</li> <li>[边界] f[1,i]=1</li> <li>我们要求的是深度恰好为K的方法数S，易知S=f[n,k]-f[n,k-1]。但需要注意的是，如果每次都取模，最后可能会有f[n,k]&lt;f[n,k-1],所以可以用S=(f[n,k]-f[n,k-1]+v) mod v</li></ul> <p>&nbsp; <h3>【其他类型】</h3> <p>USACO 1.5.1 [数字三角形]</p> <ul> <li>[状态] f[i][j]表示从(i,j)开始经过的数字的最大和</li> <li>[方程] <strong>f[i][j] = max{f[i+1][j], f[i+1][j+1]}+a[i][j]</strong></li></ul> <p>USACO 3.3.5 [博弈问题]</p> <ul> <li>[状态] s[i][j]表示从i加到j的和, 枚举l=j-i. f[i][j]表示从i到j先取者能得到的最大数字和.</li> <li>[方程] <strong>f[i][j] = s[i][j] - min{f[i+1][j], f[i][j-1]}</strong></li></ul> <p>USACO 3.2.2</p> <ul> <li>[状态] f[n][m]表示至多m个1的n位二进制数数量</li> <li>[方程] <strong>f[n][m] = f[n-1][m] + f[n-1][m-1] (f[0][m] = 1)</strong></li></ul><img src ="http://www.cppblog.com/Climber-pI/aggbug/128437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-10-03 12:23 <a href="http://www.cppblog.com/Climber-pI/archive/2010/10/03/128437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NOIp 2008 传纸条</title><link>http://www.cppblog.com/Climber-pI/archive/2010/10/02/128362.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Sat, 02 Oct 2010 14:28:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/10/02/128362.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/128362.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/10/02/128362.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/128362.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/128362.html</trackback:ping><description><![CDATA[<p>和2000的方格取数如出一辙.数据加强了一点，如果是裸的四维dp可能会超时(80).所以需要优化.</p>
<p>1.普通的四维做法</p>
<p>【状态】f[x1][y1][x2][y2] 表示从出发点分别到(x1,y1)、(x2,y2)取的最大值.G[x][y]表示该格的数.</p>
<p>【方程】<strong>f[x1][y1][x2][y2] = max{f[x1-1][y1][x2-1][y2],f[x1-1][y1][x2][y2-1],f[x1][y1-1][x2-1][y2],f[x1][y1-1][x2][y2-1]}+G[x1][y1]+G[x2][y2](如果位置不重复)</strong></p>
<p>【一个重要优化】显然有<strong>y2=x1+y1-x2(y2&gt;0),</strong>因而时间复杂度可以降到O(n^3).Cena显示总用时从近4s降到近0.3s，效果明显.</p>
<p>2.三维做法(参考官方题解)</p>
<p>【状态】f[p][x1][x2],p表示经过的格子数.</p>
<p>【方程】<strong>f[p][x1][x2]=max{f[p-1][x1-1][x2-1],f[p-1][x1-1][x2],f[p-1][x1][x2-1],f[p-1][x1][x2]}+G[x1][p-x1]+G[x2][p-x2](如果位置不重复)</strong></p>
<p>未编程验证.</p>
<p>3.更优化的做法</p>
<p>dy神牛指出，进一步的优化需要用到<strong>最小费用最大流</strong>.(NOIP绝对超纲,可以确定不会更深了.)</p>
<p>【Code】</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080; FONT-FAMILY: courier new">1</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;stdio.h&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">2</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;iostream&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">3</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">using</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">namespace</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> std;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">4</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> f[52][52][52][52] = {0}, n, G[52][52];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">5</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> max(</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> a, </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> b, </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> c, </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> d){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">6</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (a &lt; b) a= b;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">7</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (a &lt; c) a= c;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">8</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (a &lt; d) a= d;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">9</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">return</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> a;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">10</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">11</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> main(){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">12</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> m, n, i, j, k, l;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">13</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; scanf("%d%d", &amp;m, &amp;n);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">14</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (i = 1; i &lt;= m; i++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">15</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (j = 1; j &lt;= n; j++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">16</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d", &amp;G[i][j]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">17</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (i = 1; i &lt;= m; i++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">18</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (j = 1; j &lt;= n; j++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">19</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (k = 1; k &lt;= m; k++){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">20</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (i+j-k &gt; 0) l = i+j-k; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">else</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">continue</span><span style="COLOR: #000000; FONT-FAMILY: courier new">;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">21</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f[i][j][k][l] = max(f[i-1][j][k-1][l], f[i-1][j][k][l-1], f[i][j-1][k-1][l], f[i][j-1][k][l-1])+G[i][j]+G[k][l];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">22</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new"> (i == k &amp;&amp; j == l) f[i][j][k][l] -= G[i][j];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">23</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">24</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp; printf("%d\n", f[m][n][m][n]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">25</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">26</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000"></span></div>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/128362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-10-02 22:28 <a href="http://www.cppblog.com/Climber-pI/archive/2010/10/02/128362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NOIp 2000 方格取数</title><link>http://www.cppblog.com/Climber-pI/archive/2010/10/02/128346.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Sat, 02 Oct 2010 12:14:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/10/02/128346.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/128346.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/10/02/128346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/128346.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/128346.html</trackback:ping><description><![CDATA[<p>简单dp，难点在于状态的表示.</p>
<p>题目可以看做两人同时取数，这样就避免了后效性，可以用dp做了.</p>
<p>【状态】f[i][j][k][l]表示两人分别到(i,j)、(k,l)所取过的数的和.G[i][j]表示方格里的数.</p>
<p>【方程】<strong>f[i][j][k][l] = max{f[i-1][j][k-1][l], f[i-1][j][k][l-1], f[i][j-1][k-1][l], f[i][j-1][k][l-1]}+G[i][j]+(i==k&amp;&amp;j==l ? 0 : G[k][l])</strong></p>
<p>1次WA.</p>
<p>#01: Accepted (75ms, 384KB)<br>#02: Accepted (0ms, 384KB)<br>#03: Accepted (0ms, 384KB)<br>#04: Accepted (28ms, 384KB) </p>
<p>【Code】</p>
<p>&nbsp;</p>
<div style="PADDING-RIGHT: 5px; PADDING-LEFT: 4px; FONT-SIZE: 13px; BORDER-LEFT-COLOR: rgb(204,204,204); PADDING-BOTTOM: 4px; WIDTH: 98%; PADDING-TOP: 4px; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;1</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;stdio.h&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;2</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">#include&lt;iostream&gt;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;3</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">using</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">namespace</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;std;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;4</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;f[12][12][12][12]&nbsp;=&nbsp;{0},&nbsp;n,&nbsp;G[12][12];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;5</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;max(</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;b,&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;c,&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;d){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;6</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(a&nbsp;&lt;&nbsp;b)&nbsp;a=&nbsp;b;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;7</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(a&nbsp;&lt;&nbsp;c)&nbsp;a=&nbsp;c;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;8</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(a&nbsp;&lt;&nbsp;d)&nbsp;a=&nbsp;d;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">&nbsp;9</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">return</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;a;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">10</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">11</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new"></span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;main(){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">12</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">int</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;a,&nbsp;b,&nbsp;c,&nbsp;i,&nbsp;j,&nbsp;k,&nbsp;l;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">13</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&nbsp;&amp;n);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">14</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">(;;){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">15</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d%d%d",&nbsp;&amp;a,&nbsp;&amp;b,&nbsp;&amp;c);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">16</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(a&nbsp;||&nbsp;b&nbsp;||&nbsp;c)&nbsp;G[a][b]&nbsp;=&nbsp;c;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">17</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">else</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">break</span><span style="COLOR: #000000; FONT-FAMILY: courier new">;<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">18</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">19</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;=&nbsp;n;&nbsp;i++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">20</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(j&nbsp;=&nbsp;1;&nbsp;j&nbsp;&lt;=&nbsp;n;&nbsp;j++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">21</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(k&nbsp;=&nbsp;1;&nbsp;k&nbsp;&lt;=&nbsp;n;&nbsp;k++)<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">22</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">for</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(l&nbsp;=&nbsp;1;&nbsp;l&nbsp;&lt;=&nbsp;n;&nbsp;l++){<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">23</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f[i][j][k][l]&nbsp;=&nbsp;max(f[i-1][j][k-1][l],&nbsp;f[i-1][j][k][l-1],&nbsp;f[i][j-1][k-1][l],&nbsp;f[i][j-1][k][l-1])+G[i][j]+G[k][l];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">24</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff; FONT-FAMILY: courier new">if</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;(i&nbsp;==&nbsp;k&nbsp;&amp;&amp;&nbsp;j&nbsp;==&nbsp;l)&nbsp;f[i][j][k][l]&nbsp;-=&nbsp;G[i][j];<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">25</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">26</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">&nbsp;&nbsp;&nbsp;&nbsp;printf("%d\n",&nbsp;f[n][n][n][n]);<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">27</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000; FONT-FAMILY: courier new">}<br></span><span style="COLOR: #008080; FONT-FAMILY: courier new">28</span><span style="FONT-FAMILY: courier new">&nbsp;</span><span style="COLOR: #000000"></span></div>
<br>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/128346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-10-02 20:14 <a href="http://www.cppblog.com/Climber-pI/archive/2010/10/02/128346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NOIP 2004 合唱队型</title><link>http://www.cppblog.com/Climber-pI/archive/2010/09/20/127182.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Mon, 20 Sep 2010 13:35:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/09/20/127182.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/127182.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/09/20/127182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/127182.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/127182.html</trackback:ping><description><![CDATA[双向最长上升子序列，<strong>枚举k(0&lt;=k&lt;=n)，</strong><span style="FONT-FAMILY: Georgia"><strong>f[i] = max{f[j]}+1;</strong><br>在tyvj提交一直RTE，原因未知.<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><strong><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span></strong><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span></strong><strong><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;4</span></strong><strong><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span></strong><strong><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img id=Codehighlighter1_70_715_Open_Image onclick="this.style.display='none'; Codehighlighter1_70_715_Open_Text.style.display='none'; Codehighlighter1_70_715_Closed_Image.style.display='inline'; Codehighlighter1_70_715_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_70_715_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_715_Closed_Text.style.display='none'; Codehighlighter1_70_715_Open_Image.style.display='inline'; Codehighlighter1_70_715_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_70_715_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span></strong><span id=Codehighlighter1_70_715_Open_Text><strong><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">fin,&nbsp;</span><span style="COLOR: #000000">*</span></strong><strong><span style="COLOR: #000000">fout;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fin&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">chorus.in</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fout&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">chorus.out</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span></strong><strong><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_183_185_Open_Image onclick="this.style.display='none'; Codehighlighter1_183_185_Open_Text.style.display='none'; Codehighlighter1_183_185_Closed_Image.style.display='inline'; Codehighlighter1_183_185_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_183_185_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_183_185_Closed_Text.style.display='none'; Codehighlighter1_183_185_Open_Image.style.display='inline'; Codehighlighter1_183_185_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;j,&nbsp;k,&nbsp;n,&nbsp;T[</span><span style="COLOR: #000000">120</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_183_185_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_183_185_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,&nbsp;f[</span><span style="COLOR: #000000">120</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_197_199_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_197_199_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">,&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;final&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span></strong><strong><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fscanf(fin,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">n);<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;fscanf(fin,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span></strong><strong><span style="COLOR: #000000">T[i]);<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;k&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;k</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id=Codehighlighter1_325_679_Open_Image onclick="this.style.display='none'; Codehighlighter1_325_679_Open_Text.style.display='none'; Codehighlighter1_325_679_Closed_Image.style.display='inline'; Codehighlighter1_325_679_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_325_679_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_325_679_Closed_Text.style.display='none'; Codehighlighter1_325_679_Open_Image.style.display='inline'; Codehighlighter1_325_679_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_325_679_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span></strong><span id=Codehighlighter1_325_679_Open_Text><strong><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;f[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;k;&nbsp;i</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;i;&nbsp;j</span><span style="COLOR: #000000">++</span></strong><strong><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(T[j]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;T[i]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;f[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;f[i])&nbsp;f[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;f[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;f[k]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;f[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;k;&nbsp;i</span><span style="COLOR: #000000">--</span></strong><strong><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;i;&nbsp;j</span><span style="COLOR: #000000">--</span></strong><strong><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(T[j]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;T[i]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;f[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;f[i])&nbsp;f[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;f[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span></strong><strong><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;</span><span style="COLOR: #000000">+=</span></strong><strong><span style="COLOR: #000000">&nbsp;f[k];<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ans&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;final)&nbsp;final&nbsp;</span><span style="COLOR: #000000">=</span></strong><strong><span style="COLOR: #000000">&nbsp;ans;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></strong></span><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fout,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;n</span><span style="COLOR: #000000">-</span></strong><strong><span style="COLOR: #000000">final);<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></strong></span><span style="COLOR: #000000"><br></span><strong><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></strong></div>
</span>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/127182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-09-20 21:35 <a href="http://www.cppblog.com/Climber-pI/archive/2010/09/20/127182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tyvj 1049 最长不下降子序列</title><link>http://www.cppblog.com/Climber-pI/archive/2010/09/11/126422.html</link><dc:creator>Climber.pI</dc:creator><author>Climber.pI</author><pubDate>Sat, 11 Sep 2010 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/Climber-pI/archive/2010/09/11/126422.html</guid><wfw:comment>http://www.cppblog.com/Climber-pI/comments/126422.html</wfw:comment><comments>http://www.cppblog.com/Climber-pI/archive/2010/09/11/126422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Climber-pI/comments/commentRss/126422.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Climber-pI/services/trackbacks/126422.html</trackback:ping><description><![CDATA[<span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="TEXT-ALIGN: left; LINE-HEIGHT: 21px; FONT-FAMILY: verdana, sans-serif; FONT-SIZE: 14px" class=Apple-style-span>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(68,68,68); PADDING-TOP: 0px">经典的最长不下降子序列问题，<span style="FONT-FAMILY: Georgia">O(n^2)【还存在基于二分查找的O(nlogn)算法】</span></p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(68,68,68); PADDING-TOP: 0px">方程：<strong style="FONT-FAMILY: Georgia">if(a[j]&lt;=a[i]) f[i] = max{f[j]} (0&lt;j&lt;i, 1&lt;i&lt;=n)</strong></p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(68,68,68); PADDING-TOP: 0px">可能是今天状态不好，一直在纠缠细节.需要注意的是，<strong>子序列长度的最大值不一定在<span style="FONT-FAMILY: Georgia">f[n]中</span></strong>.<br></p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(68,68,68); PADDING-TOP: 0px"></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-FAMILY: courier new; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">&nbsp;1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">5001</span><span style="COLOR: #000000">],&nbsp;b[</span><span style="COLOR: #000000">5001</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img id=Codehighlighter1_84_108_Open_Image onclick="this.style.display='none'; Codehighlighter1_84_108_Open_Text.style.display='none'; Codehighlighter1_84_108_Closed_Image.style.display='inline'; Codehighlighter1_84_108_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_84_108_Closed_Image onclick="this.style.display='none'; Codehighlighter1_84_108_Closed_Text.style.display='none'; Codehighlighter1_84_108_Open_Image.style.display='inline'; Codehighlighter1_84_108_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;max(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y)&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_84_108_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_84_108_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(x&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;y)&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;x&nbsp;:&nbsp;y;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img id=Codehighlighter1_121_398_Open_Image onclick="this.style.display='none'; Codehighlighter1_121_398_Open_Text.style.display='none'; Codehighlighter1_121_398_Closed_Image.style.display='inline'; Codehighlighter1_121_398_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_121_398_Closed_Image onclick="this.style.display='none'; Codehighlighter1_121_398_Closed_Text.style.display='none'; Codehighlighter1_121_398_Open_Image.style.display='inline'; Codehighlighter1_121_398_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_121_398_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_121_398_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,&nbsp;j,&nbsp;n,&nbsp;ans;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cin&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;n;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_179_202_Open_Image onclick="this.style.display='none'; Codehighlighter1_179_202_Open_Text.style.display='none'; Codehighlighter1_179_202_Closed_Image.style.display='inline'; Codehighlighter1_179_202_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_179_202_Closed_Image onclick="this.style.display='none'; Codehighlighter1_179_202_Closed_Text.style.display='none'; Codehighlighter1_179_202_Open_Image.style.display='inline'; Codehighlighter1_179_202_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_179_202_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_179_202_Open_Text><span style="COLOR: #000000">{cin&nbsp;</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;a[i];&nbsp;b[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id=Codehighlighter1_231_317_Open_Image onclick="this.style.display='none'; Codehighlighter1_231_317_Open_Text.style.display='none'; Codehighlighter1_231_317_Closed_Image.style.display='inline'; Codehighlighter1_231_317_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_231_317_Closed_Image onclick="this.style.display='none'; Codehighlighter1_231_317_Closed_Text.style.display='none'; Codehighlighter1_231_317_Open_Image.style.display='inline'; Codehighlighter1_231_317_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_231_317_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_231_317_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;i;&nbsp;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(a[j]&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;a[i]&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;b[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;b[i])<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;b[j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(ans&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;b[i])&nbsp;ans&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;b[i];<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;ans&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span></div>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(68,68,68); PADDING-TOP: 0px"><br></p>
<p style="PADDING-BOTTOM: 0px; MARGIN: 1em 0px 0.5em; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: rgb(68,68,68); PADDING-TOP: 0px">马上要走了，高中还是麻烦很多，进度让人纠结.</p>
</span></span>
<img src ="http://www.cppblog.com/Climber-pI/aggbug/126422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Climber-pI/" target="_blank">Climber.pI</a> 2010-09-11 21:11 <a href="http://www.cppblog.com/Climber-pI/archive/2010/09/11/126422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>