上一页 1 2 3 4 5 6 7 8 ··· 17 下一页
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4107线段树。。刚开始没想那么多,直接给每一个区间加两个域,cp和num。cp表示该区间中所有数是否都已经大于等于p了, num表示累加的和。然后对于一次更新,如果该区间所有的数都已经大于等于p了,num+=2*d;否则就更新到最低。毫无疑问tle了。。最后看别人的博客,需要求一个区间的最大和最小值。如果min>=p num+=2*d;如果max<p num+=d;否则就更新下面的一层。code:View Code 1 # include<stdio.h> 2 # include< 阅读全文
posted @ 2011-10-31 18:06 奋斗青春 阅读(357) 评论(0) 推荐(0) 编辑
摘要: hdu 1575 Tr Ahttp://acm.hdu.edu.cn/showproblem.php?pid=1575矩阵快速幂!第一次写矩阵快幂,因为以前写过数的快速幂所以矩阵写起来就很顺手了。View Code 1 # include<stdio.h> 2 # include<string.h> 3 # define N 15 4 # define Mod 9973 5 int a[N][N],b[N][N],mm[N][N]; 6 int main() 7 { 8 int i,j,n,ncase,m,sum,h; 9 scanf("%d",&a 阅读全文
posted @ 2011-10-31 17:46 奋斗青春 阅读(204) 评论(0) 推荐(0) 编辑
摘要: Max Sum Plus Plus PlusTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 659Accepted Submission(s): 312Problem Description给定一个由n个正整数组成的整数序列a1 a2 a3 ... an求按先后次序在其中取m段长度分别为l1、l2、l3...lm的不交叠的连续整数的和的最大值。Input第一行是一个整数n(0 ≤ n ≤ 1000),n = 0表示输入结束第二行的第一个数是m( 阅读全文
posted @ 2011-10-30 21:22 奋斗青春 阅读(1183) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2227Find the nondecreasing subsequencesTime Limit: 10000/5000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 476Accepted Submission(s): 186Problem DescriptionHow many nondecreasing subsequences can you find in the sequence 阅读全文
posted @ 2011-10-30 09:32 奋斗青春 阅读(1420) 评论(3) 推荐(1) 编辑
摘要: 最近几天一直在做DP,又学习了两种方法:斜率优化,单调队列优化。hdu 2577 How to Typehttp://acm.hdu.edu.cn/showproblem.php?pid=2577打印字母,很经典的一类dp,用二维数组表示:dp[i][0]表示打印完第i个字符,键盘上的大写锁定键是关闭着的。dp[i][1]表示打印完第i个字符,键盘上的大写锁定键的打开着的。那么根据第i个字母的大小写就很容易写出前后的转化关系。code:View Code 1 # include<stdio.h> 2 # include<string.h> 3 int min(int a 阅读全文
posted @ 2011-10-14 12:18 奋斗青春 阅读(2380) 评论(0) 推荐(2) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3957/*第一种方法是建立一个有2*N行,3*N列的矩阵,行代表的是选择哪些人的哪一个形态,前2*N列代表的是N个人的两种形态,后面N列表示选择了某个人,这样我们可以这么理解,前2*N列是我们必须至少覆盖一次的,后N列是我么至多覆盖一次的,那么我们就在前2*N列进行重复覆盖,后面N列进行精确覆盖,此外,判断是否得到了一组解,只要判断前2*N列是否已经被完全覆盖了即可。这个矩阵的规模是50*75的。*//*第二种方法是建立一个2*N行2*N列的矩阵,直接跑重复覆盖,此外用一个数组标记某一个人是否被选择 阅读全文
posted @ 2011-10-14 10:40 奋斗青春 阅读(399) 评论(0) 推荐(1) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4076题意:有n*m个点,每一点可以向四个方向走,有些点是墓地不能走,有些点是山洞,当你走到该点时会传送到另外一点,所花费的时间有可能是个正数也可能是个负数也可能是0。起点是(0,0),目的地是(n-1,m-1),题目保证起点和终点不会是墓地也不会是山洞。如果有可能永远都到达不了终点也就是该图存在负权回路,输出Never;否则输出需最少的花费时间或者Impossible;思路:存在负权,显然要用spfa。当对某一个点的松弛次数超时该图的顶点数n*m时就表示存在负权回路。但是有一点需要注意:判断负权回 阅读全文
posted @ 2011-10-14 10:31 奋斗青春 阅读(1102) 评论(0) 推荐(3) 编辑
摘要: 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4064/*福州网络赛的一道题,很容易看出状态压缩DP,当时用四进制写的,没能做出来,感觉会超时,赛后看别人的解题报告,可以记录上面的状态和下面的状态然后用三进制实现。不过要加一些剪枝,比如:对于四面都一样的瓷块,只需算出一种状态,然后乘以4。这是个很有力的剪枝。*/47306632011-10-10 10:15:52Accepted4064328MS9640K1382 BC++zyzamp这次写的方法和以前写的不同,以前都是枚举每一个状态,直接for循环搞定,而这个不能直接枚举状态,因为有的状态不存 阅读全文
posted @ 2011-10-10 10:54 奋斗青春 阅读(550) 评论(0) 推荐(0) 编辑
摘要: 题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3899题意:吉林大学有n个学院,有n-1条路保证这n个学院两两相连,现在要举行一场程序设计大赛,问在哪一个学院举行,所需的花费最少。在第i个学院举行所需的花费为sum(dis(i,j)*num[j]) ,(1=<j <= n);dis(i,j)表示第j个学院与第i个学院之间的距离,num[j]表示第j个学院有少个支队伍参赛!由于n<=100000就限制了不能暴力枚举!很明显的树形DP,先算出在第1个学院举行时所需的总花费。以第1个学院为根可以建一棵树,然后求出每个节点的Num值。这 阅读全文
posted @ 2011-10-09 16:24 奋斗青春 阅读(535) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1823第一道二维线段树, 感觉和一维的基本上一样,只不过多了一个子函数!以身高建立主函数,活泼度为子函数。身高可以转化为0-100, 因为活泼度只有一位小数,可以乘以10转化为整数!code:View Code 1 # include<stdio.h> 2 # include<string.h> 3 # define HMax 405 4 # define AMax 4005 5 struct sub_tree{ 6 int la,ra,Max; 7 }; 8 struct. 阅读全文
posted @ 2011-09-30 14:21 奋斗青春 阅读(507) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 17 下一页