随笔分类 -  01. . . . . |POJ

POJ 3468:A Simple Problem with Integers(线段树[成段更新])
摘要:题意:N个数Q次操作。一共两种操作:Q l r :询问[l,r]这个区间里的数字和,C l r c: [l,r]区间里的每个数都加上c。1 ≤ N,Q ≤ 100000.方法:线段树的成段更新。注意懒惰标记。这只是为了有个模板。易错点在代码中以下划线标注。//16:06#include #include #define N 100010#define lson l, mid, rt mid) update(L,R,v,rson); pushUp(rt);}long long query(int L, int R, int l, int r, int rt) { if (L mid... 阅读全文

posted @ 2014-03-19 17:16 ShineCheng 阅读(168) 评论(0) 推荐(0)

POJ 1722: SUBTRACT
摘要:题形:DP,背包题意:有一个数组,里面保存着n个数。con(i) 操作表示 把a[i] 和 a[i+1] 这两项 用 a[i]-a[i+1]这一项取代(所以操作结束后数组长度会减少1)。通过n-1次操作,可以让数组只剩下一个数。给你一个目标数,求n-1次操作,使得经过这些操作之后这个数组能变成这个目标数(题目保证存在解)思路:题目拐了个大弯啊~隐藏的真好。需要转换模型。首先,容易把题意转变成,a[1]-a[2]-a[3]-...-a[n],这样一个算式,让你加括号,使得结果为目标数然后想象一下最后的答案。假设我们知道最后的答案,那么把所有括号拆掉,结果的式子一定一这样的:a[1]-a[2]&# 阅读全文

posted @ 2014-03-06 18:41 ShineCheng 阅读(413) 评论(0) 推荐(0)

POJ 2577: Interpreter
摘要:简略解题报告DescriptionA certain computer has 10 registers and 1000 words of RAM. Each register or RAM location holds a 3-digit integer between 0 and 999. Instructions are encoded as 3-digit integers and stored in RAM. The encodings are as follows: 100 means halt 2dn means set register d to n (between 0 a 阅读全文

posted @ 2014-03-03 00:17 ShineCheng 阅读(382) 评论(0) 推荐(0)

POJ 2796: Feel Good
摘要:题意:一个数组,对于某个区间,这个区间的和*这个区间中的最小值=这个区间的计算值。求这个数组中的最大计算值,并任意输出其的一个左右位置。思路:维护一个最小单调栈。对于某个元素:如果被弹出了,说明它最多向右延伸到这里。对于进栈,如果它的进栈没有造成任何元素的弹出,则说明它的位置就是它左边能延伸到的位置。如果造成元素弹出,那么,最后一个弹出的元素的左边能延伸到的位置就是本元素往左能延伸到的位置。对于两个元素相同时:我不作弹出处理,仅仅把这个元素的位置更新(代码中表现为把这个元素往左延伸的和更新)。在弹出元素时,能求和,而这个和正是元素往右延伸的和。往左延伸的和已经算好,所以这个元素为最小值的最大区 阅读全文

posted @ 2013-12-03 23:26 ShineCheng 阅读(613) 评论(0) 推荐(1)

POJ 1011:木棒
摘要:传送门http://poj.org/problem?id=1011题目大意已知原来有等长若干木棒,现在给你一堆断了的木棒的长度,问原来的木棒最短是多长题目类型DFS + 剪枝 + “贪心优化”思路http://blog.csdn.net/lyy289065406/article/details/6647960三个剪枝1)设最长的木棒长度max ,木棒长度和sum, 则可能区间为[max, sum/2] 并且 长度能被sum整除2)一次拼接中,一次循环中,同长度的木棒只检测一次3)每次拼接的第一个木棒,如果不成功则说明这个木棒一定不能成功。所以break一个优化需要逆序搜索。(两个短的比一个长的 阅读全文

posted @ 2013-06-24 14:36 ShineCheng 阅读(532) 评论(1) 推荐(0)

POJ 1042:Gone Fishing
摘要:题意:有一排池塘,从i到i+1个池塘需要t[i]时间(我的代码里是t[i+1]), i池塘一次能抓到f[i]只鱼,每抓一次后少d[i]只,到少于等于0时,之后都为0问告诉你所有信息,求最优情况(最优情况相同时,取前面时间花的多的)类型:DP动态规划思路:状态含义:dp[i][v]为第i个池塘还有v时间时,的最优答案状态转移:那么对于池塘i,如果它有2中选择1:其实没到过池塘i2:到了池塘i并停留k时间当然,如果要求必须到,那么第一个选择忽略。初始化:对于所有i=1,那么所有时间都用来停留在i特殊:如果必须到达当前,然而所给的时间少于从上一个池塘来到这个池塘的时间,则IMPOSSIBLE(注意, 阅读全文

posted @ 2013-05-19 23:52 ShineCheng 阅读(244) 评论(0) 推荐(0)

POJ 1141:Brackets Sequence
摘要:题意:定义合法串为(),[]以及他们的并列组合如()[],()(),或嵌套组合如([]),(())。 其实正常理解就好~然后给你一个串,让你求出把它改对后的最短合法串。类型:DP动态规划思路:当我拿到一个字符i, 那么在一种最优结果中,它只有这么两种结果:要么和某个字符匹配,要么不匹配。定义状态:dp[i][j]为 i到j的子串中 所能做到的最大匹配数符号数。最大匹配符号数说明:如(([))]] 如果这么匹配(([))]] 数量为2, 而这样匹配 (([))]] 数量为4。易知后者也是最大的,所以这个子串最大匹配符号数为4.状态转移:首先特判:若i所在字符与j所在字符能匹配(() 或 []). 阅读全文

posted @ 2013-05-15 17:11 ShineCheng 阅读(129) 评论(0) 推荐(0)

POJ 2479:Maximum sum
摘要:题意:告诉你一些数字 ,让你在其中找出两段,使得这两段数字累加的和最大。Hint:如给你的数字是 10 1 -1 2 2 3 -3 4 -4 5 -5 则答案是 13。因为In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.类型:DP动态规划思路:My思路:(本思路过于奇葩,脑血拴心脏病患者请不要阅读)把所有的相关的条件都表示成状态,然后写出状态之间转移的方程所以我本题弄的状态十分恶心。。。dp[i][j][k]表示从第0个数到第i个数,(j==0?包含:不包含)其本身的(k==0?单区间:双区间) 阅读全文

posted @ 2013-05-13 18:38 ShineCheng 阅读(149) 评论(0) 推荐(0)

POJ 3670 Eating Together
摘要:之前一直不过,最后的过的思路如下:dp[i][j]表示的含义是 到第i位,最高为j的子序列的最长长度。递推式:dp[i][1] = dp[i-1][1] + (a[i] == 1?1:0);dp[i][2] = max(dp[i][1], dp[i-1][2]) + (a[i]==2?1:0);dp[i][3] = max3(dp[i][1], dp[i][2], dp[i-1][3]) + (a[i]==3?1:0)高度为1的,最长只能为之前的,加上本身(如果本身是1则可加,否则不行)(1111_)高度为2的,为刚才算出的 高1序列最长 与 之前高2序列最长 的最大值 再视情况包含本身。(. 阅读全文

posted @ 2013-05-09 12:44 ShineCheng 阅读(142) 评论(0) 推荐(0)

导航