摘要: 这个题目有点价值吧,设f[i]为i的不同组合有多少种,那么i就可以表示成(i - 1) + 1,也就是i - 1有多少种排列i就有多少种,但是比如i=6的时候,可以表示成2+2+2, 4+2,这里没有出现1,怎么办呢?可以看到i为偶数的时候一定可以把i表示成2*(i / 2)。 然么就可以得到: f[i]=f[i - 1], i 为奇数时 f[i]=f[i - 1] + f[i / 2], i为偶数时,又题目说9位数,所以要求模。 代码:#include <stdio.h>#include <stdlib.h>int f[10000001];int main(int a 阅读全文
posted @ 2011-07-12 22:11 zqynux 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 简单DP,设f[i][j]是取i个数,左边取j个,转移方程: f[i][j] = max(f[i - 1][j - 1] + i * num[j], f[i - 1][j] + i * num[n - (i - 1 - j)]);2011年7月16日 08:55:21添加: 昨晚删数那题,又看了下这题,就觉得这题不能用区间动态规划吗?仔细对比了一下,还真不能,这里的i无法用区间动态规划里的什么来表示,所以这里不能用区间动态规划。 代码如下:#include <stdio.h>#include <stdlib.h>int num[2001];int f[2001][200 阅读全文
posted @ 2011-07-12 20:40 zqynux 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.felix021.com/blog/read.php?1587 http://fayaa.com/code/view/13122/raw/ 这篇也不错,自己点开看吧: http://www.wutianqi.com/?p=1850今天回顾WOJ1398,发现了这个当时没有理解透彻的算法。看了好久好久,现在终于想明白了。试着把它写下来,让自己更明白。最长递增子序列,Longest Increasing Subsequence 下面我们简记为 LIS。排序+LCS算法 以及 DP算法就忽略了,这两个太容易理解了。假设存在一个序列d[1..9] = 2 1 5 3 6 . 阅读全文
posted @ 2011-07-12 19:18 zqynux 阅读(942) 评论(0) 推荐(0) 编辑