上一页 1 2 3 4 5 6 7 8 9 ··· 36 下一页

2011年8月15日

hdu 2159

摘要: 二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有 一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和 b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。费用加了一维,只需状态也加一维即可。设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值。状态转移方程就是:f[i][v][u]=max{f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+w[i]}如前述方法,可以 阅读全文

posted @ 2011-08-15 16:08 宇宙吾心 阅读(512) 评论(0) 推荐(0) 编辑

2011年8月14日

hdu 1561

摘要: 树形dp题 阅读全文

posted @ 2011-08-14 21:41 宇宙吾心 阅读(118) 评论(0) 推荐(0) 编辑

hdu 2639

摘要: 第K优解问题其基本思想是将每个状态都表示成有序队列,将状态转移方程中的max/min转化成有序队列的合并。这里仍然以01背包为例讲解一下。首先看01背包求最优解的状态转移方程:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。如果要求第K优解,那么状态f[i][v]就应该是一个大小为K的数组f[i][v][1..K]。其中f[i][v][k]表示前i个物品、背包大小为v时,第k优解的值。“f[i][v]是一个大小为K的数组”这一句,熟悉C语言的同学可能比较好理解,或者也可以简单地理解为在原来的方程中加了一维。显然f[i][v][1..K]这K个数是由大到小排 阅读全文

posted @ 2011-08-14 21:14 宇宙吾心 阅读(1154) 评论(0) 推荐(1) 编辑

hdu 3535

摘要: 怎么处理至少一次,至多一次?有点猫腻的背包。 阅读全文

posted @ 2011-08-14 21:01 宇宙吾心 阅读(163) 评论(0) 推荐(0) 编辑

hdu 3449

摘要: 经典的dp题。这类问题要用到两个数组,dp[0][i]表示i块钱可以买到的最大价值,dp[1][i]表示考虑到当前盒子时,i块钱可以买到的最大价值,首先dp[0]置为0,枚举全部的盒子,dp[1]置为-oo表示买不到,更新的转移可以从dp[0]转移也可以从dp[1]转移,从dp[0]转移表示你还没有买盒子,要附加上盒子的价格,dp[1]表示你买过盒子了,就直接转移就可以了,转移方程如下:dp[1][k]=max(dp[1][k],dp[1][k-c[i][j]]+v[i][j],dp[0][k-c[i][j]-p[i]]+v[i][j]); dp[0][j]=max(dp[0][j],dp[1 阅读全文

posted @ 2011-08-14 20:06 宇宙吾心 阅读(253) 评论(0) 推荐(0) 编辑

hdu 2294

摘要: 以F[i][j]表示长度为i的pendant,用了j种珍珠,所构成的方案数,则F[i][j]=F[i-1][j]*j+F[i-1][j-1]*(k-j+1)优化的方法是使用矩阵来做。将F[i-1]到F[i]的转移用矩阵来描述,相当于一个k*k的线性变换矩阵。因此F[i]=A*F[i-1],这里A是转移矩阵,即F[i]=Ai-1*F[1],所以F[1]+…+F[n]=A0*F[1]+…+An-1*F[1]=(E+A+A2+…+An-1)*F[1]。 阅读全文

posted @ 2011-08-14 18:20 宇宙吾心 阅读(156) 评论(0) 推荐(0) 编辑

2011年8月13日

hdu 2855

摘要: 阅读全文

posted @ 2011-08-13 21:26 宇宙吾心 阅读(180) 评论(0) 推荐(0) 编辑

hdu 2276

摘要: 关键是矩阵的构造。 阅读全文

posted @ 2011-08-13 19:39 宇宙吾心 阅读(162) 评论(0) 推荐(0) 编辑

hdu 2254

摘要: 离散+二分解题思路:求t1->t2天内,v1->v2一共有多少条的路径。就是要用到离散数学的可达矩阵的n次幂各元素的值就是经过n条路可以到达该点。所以说这道题说白了就是叫你求 A^t1+a^(t1+1)+……A^(t2),输出v1,v2该元素的值模2008(注意负数的处理).所以就是要用到矩阵降幂+二分求和。 阅读全文

posted @ 2011-08-13 19:23 宇宙吾心 阅读(211) 评论(0) 推荐(0) 编辑

hdu 3117

摘要: f(n)=1/sqrt(5)(((1+sqrt(5))/2)^n+((1-sqrt(5))/2)^n)假设F[n]可以表示成 t * 10^k(t是一个小数),那么对于F[n]取对数log10,答案就为log10 t +K,此时很明显log10 t<1,于是我们去除整数部分,就得到了log10 t,再用pow(10,log10 t)我们就还原回了t。将t×1000就得到了F[n]的前四位。具体实现的时候Log10F[n]约等于((1+sqrt(5))/2)^n/sqrt(5),这里我们把((1-sqrt(5))/2)^n这一项忽略了,因为当N>=40时,这个数已经小的可以 阅读全文

posted @ 2011-08-13 17:16 宇宙吾心 阅读(497) 评论(0) 推荐(1) 编辑

上一页 1 2 3 4 5 6 7 8 9 ··· 36 下一页

导航