泉州一中普及组日赛 0708
fresh_snow · · 题解
A(很简单)
题目
主赛有
淘汰赛有
求
sol
简单的完全背包,两个物品,一个主赛,一个淘汰赛。
注意从程序上要特判
易错点:写反重量和价值
B(简单)
题目
给出一个
sol
数位贪心,考虑直接枚举所有的
不难注意到,
例如:样例二,
我们只需要考虑
-
(01111)_2 -
(10111)_2 -
(11001)_2 -
(11010)_2
易错点:进制位混乱
C(简单)
题目
在二维平面上给出
sol
原题:NOIP1999导弹拦截
暴力DP:
此外,一起来欣赏一份经典错误代码
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
if( w[i]>w[j] && h[i]>h[j] )
dp[i] = max ( dp[i], dp[j]+1 );
此外,该转移可以通过线段树优化,达到
易错点:严格大于做成不严格,初始没有从
D(送分)
题目
给出两个长度为
sol
枚举
根据加法原理和乘法原理得时间复杂度为
当然,可以用类似 C 题的线段树优化达到
E(送分)
黑白染色即可。
F(送分)
略
易错点:
G(很简单)
题目
在网格图中给出一个联通块,要求去掉
sol
dfs 之后,联通块可以标记成一个树
每次去掉任意一个叶子即可。
H(简单)
题目
给出一个长度为
sol
注意到:
- 对于一个不单调的序列,不会划分很长的一段
- 对于单调的序列,中间不会划分
所以将单调的部分中间直接砍掉只留首尾两个,并且每次划分长度不超过
直接 暴力DP
I(比较简单)
题目
给出一个树,有若干个顶点被染黑,求有多少种分割树的方案使得每个子树恰好有一个黑色顶点,答案对
sol
考虑DP,设计状态
在转移过程中,要保证:每个联通块恰好一个黑色节点,于是由划分与不划分有转移方程:
int f[2]={dp[u][0],dp[u][1]};
dp[u][0]=f[0]*(dp[v][0]+dp[v][1])%mod;
dp[u][1]=f[0]*(dp[v][1])%mod+f[1]*(dp[v][0]+dp[v][1])%mod;