
DP
文章平均质量分 63
NeroXD
这个作者很懒,什么都没留下…
展开
-
P2704 [NOI2001] 炮兵阵地 状压DP
P2704 [NOI2001] 炮兵阵地 HINTHINTHINT 对于 100% 的数据,N≤100N≤100N≤100,M≤10M≤10M≤10,保证字符仅包含 ppp 与 hhh。 M的数据范围很小,考虑状压DP。 首先,影响第iii行的有i−1i-1i−1行和i−2i-2i−2行,所以我们的dpdpdp数组要体现出来这两个数据的,同时体现出来自己现在在哪行。 所以我们可以开个三维的dpdpdp数组:dp[pre][now][i]dp[pre][now][i]dp[pre][now][i],其中的i原创 2021-07-28 16:24:09 · 149 阅读 · 0 评论 -
P2051 [AHOI2009]中国象棋
题目链接 题目大意: 给定n*m大小表格,让你摆放棋子,摆放的要求是同一行、同一列中的棋子数不超过两个,问一共可能有多少摆法。 (不看别人的题解真不会开dp数组,太弱小了) dp数组开三位,表示已经处理好了前i行时,有j列有一个棋子,有k列有两个棋子。 dp数组开完之后思路就很明了。 我们每次最多可以新摆放两个棋子(如果多了同一行的就会超出限制) 先考虑摆放零个的情况: 直接就和上一层的一样了。 摆一个的情况: 我们只能摆在有零个或者一个棋子的那一列。 摆两个的情况: 还是可以摆在有零个或者一个棋子的那一列原创 2021-07-27 16:29:41 · 245 阅读 · 1 评论 -
Making the Grade (POJ - 3666) 离散化+DP
Making the Grade 题目大意:给你一个数组,求将其修改为单增或单减(非严格)所需要的最少代价,修改一次的代价为|初值-末值|。 以单增为例: 所有更改后的数字必定在原数组中出现过。 dp[i][j]表示前i个数都满足要求,且第i个数字取j时所要的代价之和,但由于a[i]取值范围到了1E9,故要进行离散化——第i个数字取第j小的数字(sort) dp[i][j]=abs(a[i]−b[j])+min(dp[i−1][p])且p取1到jdp[i][j]=abs(a[i]-b[j])+min(dp[原创 2021-07-07 10:06:19 · 240 阅读 · 0 评论