D题说的是 你选定一个区间如[l r] 将这个区间内的每个数都加上1,然后求将这整个整个序列都变成h的方案数有多少种 没有一个位置会有超过1次方[ 或者放 ]
考虑当前位置放的是什么 有5种
- 不放
[ 右开区间
] 左开区间
[] 自己一个区间
][ 开始一个区间关闭一个区间
dp[i][open] 表示第i个位置被open个区间包括的方案数
可以知道 A[i]+open==h 或者等于 h-1 的时候是有解的因为自己可以产生一个
当A[i]+open==h时
不放
dp[i][open]+=dp[i-1][open]
放[
dp[i][open]+=dp[i-1][open-1]
A[i]+open+1==h时
放]
dp[i][open]+=dp[i-1][open+1]*(open+1)
放[]
dp[i][open]+=dp[i-1][open];
放][
dp[i][open]+=dp[i-1][open]*open;
时间: 2024-10-05 11:17:22