这个dp挺好想的,每次走的位置是知道的,所以走到那个点,就能知道从那个点过来的。
然后再分到的这个点是不是石头,如果是石头就总数加一,否则就不变。
难得地方是范围的问题。l最大能到一亿,这样的话,就要缩短距离,缩短的话,就离散化。
我们只需将每两个石头超过 s×t 的距离缩成s×t就可以了。
算是了解了离散化的概念
#include<bits/stdc++.h>
using namespace std;
const int maxn = 150;
const int maxl = 300 * 105;
//其实开90 * 105就可以了;
int L,s,t,m,ss[maxn],a[maxn],dp[maxl],base;
//stone就是石头的初始位置;a为我们将石头初始化后的石头位置;
bool v[maxl];
//标记一下坐标上的该点是否为石头;
int main()
{
int