DP
by_luoluo
这个作者很懒,什么都没留下…
展开
-
HDU 1058 Humble Number DP
好好做专题系列= =DP第一题【题意】因子只有{2、3、5、7}中一个或多个的数称为Humble Number,从小到大将它们排成数列,求第n个Humble Number。这是前20个Humble Number {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27}【分析】因为因子只有2原创 2013-05-19 14:26:31 · 633 阅读 · 0 评论 -
hdu 1087 Super Jumping! Jumping! Jumping! DP
简单的递增数列最大和dp[i]保存以i为结尾的递增数列最大和于是有dp[i] = max(dp[i], dp[j]+a[i]);#include using namespace std;#define N 1005int a[N],dp[N];int main(){ int n; while(cin >> n) { if(n==0) break;原创 2013-05-19 14:48:04 · 550 阅读 · 0 评论 -
HDU 2546 饭卡 DP
题意显而易见,不过一个细节看走眼奉献了1WA【分析】(1)初始余额m小于5,直接输出m(2)初始余额大于5:找出最贵的菜,与最末的元素交换位置然后转化为01背包问题选择令前n-1种菜之和最接近m-5,然后余额减去最大价值的菜即m - 选择的菜价格之和 - a[n-1]m -= 5 ----- 背包容量a[i] ----- 价值a[i] ----- 重量原创 2013-05-19 15:39:06 · 625 阅读 · 0 评论 -
HDU 1160 FatMouse's Speed DP
简单DP,最长递减子序列,要保存路径矬代码献上:#include #include #define N 1005struct Mouse{ int w,s; int id,prev;}mice[N];int dp[N];int cmp(const void *a, const void *b){ struct Mouse *c = (Mouse *原创 2013-05-19 17:13:24 · 598 阅读 · 0 评论 -
POJ 1050 To the Max DP
【题意】求n*n矩阵的最大子矩阵(即子矩阵里的每个数之和最大)【分析】不会= =,以为要两个坐标同时怎样,各种YY,YY不出来稍微看了下题解,发现做法挺简单的,在和最大的连续子序列的基础上枚举,将二维矩阵压扁成一维令a[i][j]为矩阵第j列前i个元素的和,的到一个新的序列,最上面加上一行全零行然后枚举a[j][k] - a[i][k] (i:0~n-1 j:i+1~n原创 2013-05-20 09:03:20 · 531 阅读 · 0 评论 -
POJ 1159 Palindrome dp
//题意:求至少添加多少个元素使原字符串构成回文//思路:将原字符串翻转,两字符串求最长公共子串,然后为每个没匹配到的字符在相应对称的位置添加一个元素即可,//结果是n - Lcs.size//因为开dp[5000][5000]超内存,所以用到了传说中的滚动数组#include #include #define N 5005char a[N],b[N];//int dp[N][原创 2013-05-21 16:17:48 · 515 阅读 · 0 评论 -
POJ2479 Maximum sum DP
最大连续字串和的加强版。1 -1 2 2 3 -3 4 -4 5 -5Hit:In the sample, we choose {2,2,3,-3,4} and {5}, then we can get the answer.即求两段不重叠连续字串的最大和第一反应是枚举每个点作为断点,两段分别求最大连续子串和,取最大值#include #define原创 2013-05-23 16:29:38 · 664 阅读 · 0 评论 -
POJ3014 Cake Pieces and Plates DP
虽说是DP入门题,但第一次要理解还是会花很大的劲。dp[i][j]表示j块蛋糕放在i个盘子上的方法数,可有盘子是空的。①若i==j当盘子有空,问题可转化为dp[i-1][j] (i-1保证了至少有一个盘子是空);当盘子全满,只有一种情况,就是每个盘子放一块蛋糕;②若i>j当盘子有空,问题转化为dp[i-1][j];不存在盘子满的状态;③若i当盘子有空,问题转化为原创 2013-05-23 18:03:10 · 741 阅读 · 0 评论