动态规划
文章平均质量分 63
jordandandan
这个作者很懒,什么都没留下…
展开
-
poj1837(01背包)
解题思路: 每向天平中方一个重物,天平的状态就会改变,而这个状态可以由若干前一状态获得。 定义dp[i][j]为表示放入i个砝码后到达状态j的方法数。由于最重25,最多20个,长最多15,所以为25*20*15 = 7500,范围是-7500,7500,平横时j是0,但下标避免负数,为0-15000,平衡时为7500。 所以状态转移方程:dp[i][ j+ w[i]*c[k] ]= ∑(原创 2013-07-29 16:55:07 · 645 阅读 · 0 评论 -
poj1014 (多重背包模板题)
模板 procedure MultiplePack(cost,weight,amount) if cost*amount>=V CompletePack(cost,weight) return integer k=1 while k ZeroOnePack(k*cost,k*weight)原创 2013-08-05 13:49:01 · 949 阅读 · 0 评论 -
poj3260 (多重背包+完全背包)
买家的硬币是有限制的,是多重背包。 卖家每种硬币没有限制,是完全背包。 dp_buy[i]表示买家凑齐i需要的最少硬币个数。 dp_sale[i]表示专家凑齐i需要的最少硬币个数。 源码 #include #include #define inf 1<<25 using namespace std; int n,m,cnt[105],val[105]; int dp_buy[20原创 2013-08-05 21:29:08 · 817 阅读 · 1 评论 -
poj1836
蓝色士兵的身高和红色士兵的身高是完全没有关系的。 要求最少出列数,就是留队士兵人数最大,如图,即左边的递增序列人数和右边的递减序列人数之和最大 因而可转化为求“最长不降子序列”和“最长不升子序列”问题 但是不能直接套用LIS思想,因为这题不允许任一侧的序列中出现等高士兵 方法: 对士兵的身高数组逐一进行枚举,枚举到的k值作为蓝色士兵,k+转载 2013-08-08 15:05:19 · 585 阅读 · 0 评论 -
poj1159 LCS
设原序列S的逆序列为S' ,最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度 几种不同的申请空间方法的区别: 1. 静态数组 开销大小为5001*5001的int是铁定超的. 2. 动态数组 单纯的申请动态数组是不能解决这个问题的,动态数组只能增加空间利用率,但是本题最恶劣的数组大小还是5001*5001,动态数组是不能改变这个事实的 3.原创 2013-08-10 13:48:44 · 594 阅读 · 0 评论 -
dp求解矩阵链问题(poj1651)
例如上图,将所得结果存入数组中 动规方程组: 此题只不过是不能取第一个和最后一个,求解方法同矩阵链乘 源码: #include #define MAX 110 int lenth; int m[MAX][MAX]; int c[MAX]; void multiplication(void){ int i,l,k,j,temp; for(i=1;i<lenth原创 2013-08-24 16:25:16 · 733 阅读 · 0 评论