05 2013 档案
HDU - To The Max(dp)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1081这题是经典的dp问题,首先,题目的意思是求出一个矩阵的子矩阵,他满足所有子矩阵当中,所有的元素之和最大,那么,这类的问题,我们可以将矩阵压缩成一维来解决,那么,这个问题就转化为一维的求连续的元素之和最大的问题。那么,这样的问题也就解决了。这题已经AC了,具体请参考下面的代码:#include <stdio.h>#include <string.h>#define MAX 101int a[MAX][MAX];int dp[MAX];int fun(int n){ int max
阅读全文
HDU -最大子矩阵(dp)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1559这题是经典的dp问题,因为这个是矩阵,那么,可以将这个问题转化为一维数组的问题,这题已经AC了,下面是具体的代码:#include <stdio.h>#include <string.h>#define MAX 1001int a[MAX][MAX];int dp[MAX];int main(int argc , const char *argv){ int ncase,m,n,x,y; scanf("%d",&ncase); while(ncase-
阅读全文
HDU - Palindrome (dp)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1513这题其实是LCS问题,假设一个序列为s1,通过反转得到一个序列s2,那么,将这个问题转化为LCS问题,可以使用dp来解决,其中,有一个问题要注意,由于题目的要求限制,如果,内存没有优化过,可能会出现MLE问题哦!所以,这个时候,要使用滚动数组来解决超内存的问题,所以,这题主要涉及的方法 LCS + 滚动数组。下面是具体的AC的代码:#include <stdio.h>#include <string.h>#define MAX(x,y) ((x) > (y) ? (x) :
阅读全文
HDU - Common Subsequence(dp)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1159这题是求出两个序列的最长公共序列(注意,序列可以不是连续的),这个是经典的dp问题,所以,这个可以用dp来解决,即使用二维数组dp[i][j]表示状态,所以,通过二维数组的行列分别表示两个序列匹配的状态转移过程,那么,其动态转移方程为:下面是已经AC的具体代码:#include <stdio.h>#include <string.h>#define Max(x,y) ((x) > (y) ? (x) : (y))int dp[1001][1001];int main(int
阅读全文
HDU - Max Sum(dp)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1003这是比较经典的dp问题,求连续字段和中最大的值。那么,他的动态转移方程为:sum[i] = max(sum[i-1]+a[i],a[i]) 其中 sum[i]记录以第i个结点末端的连续字段和,那么,下面是具体已经AC的代码:#include <stdio.h>int a[100010];int main(void){ int n,m,k = 1,i,pos,start,end; scanf("%d",&n); while(n--) { scanf("%d
阅读全文
浙公网安备 33010602011771号