2011年8月14日

hdu 1561

摘要: 树形dp题 阅读全文

posted @ 2011-08-14 21:41 宇宙吾心 阅读(119) 评论(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 宇宙吾心 阅读(1161) 评论(0) 推荐(1)

hdu 3535

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

posted @ 2011-08-14 21:01 宇宙吾心 阅读(174) 评论(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 宇宙吾心 阅读(256) 评论(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 宇宙吾心 阅读(160) 评论(0) 推荐(0)

导航