
dp
四维2000
SW2000
展开
-
[SCOI2005]互不侵犯King (状压DP)
题意:给一个n*n(n<=9)的棋盘,问放k(k<=n*n)个国王满足不冲突的方案数,国王的攻击范围是周围的八个位置。分析:非常经典的状压dp,dp[i][j][s]代表第i行,已经存了j个棋子,这一行的国王存放状态为s的方案数,空间复杂度n*k*(2^n)大概1e6,时间复杂度n*k*(2^2n),大概2e8,最后在darkoj上运行是150ms,应该是常数比较小。代码:#include<bits/stdc++.h>using namespace std;原创 2021-03-08 23:18:34 · 295 阅读 · 0 评论 -
2020CCPC威海站 L Clock Master(分组背包)
题意:给出一个数拆成若干个数的和,使这些数的lcm最大分析:题意非常难懂,给了很多无关的概念干扰项,比赛时读了三遍才搞懂,赛场时一直再猜结论,一直卡了有俩小时吧。补题时知道是分组背包后很快就有思路了,想来还是对于dp不够熟悉,另外需要一提的是log(n)的复杂度很大,需要预处理否则会T代码:#include<bits/stdc++.h>#define fi first#define se second#define mid (l+r>>1)#define end原创 2020-11-09 22:33:01 · 220 阅读 · 0 评论 -
2020计蒜之道初赛一 染色 (dp+线段树)
题意:对一个长度为n的条染色,只能黑或者白,对第i块染色染成黑或白分别加分arr[i]和brr[i],给出m条线段,对这些线段同时染成某种颜色有额外的加分,求最大的加分数。解析:比赛时用着明显错误的假算法冲过了中等难度,感觉题目的数据有点过水,不能保证代码完全正确 (⊙﹏⊙)现在想来中等难度的O(n+m^2)的正确算法应该是:把黑白区间分别按照右边界从小到大排列,之后在dp的过程中到达右边界时进行dp,状态转移方程就是dp[i]=max(dp[i],dp[j-1]+pre[i]-pre[j-1]+s原创 2020-09-13 22:38:31 · 247 阅读 · 0 评论