rt,月2t1,但是月赛的时候因为有点事没多少时间思考。那时候只想到顺推,很懵地拿了90分
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN = 1000005;
int n, a[MAXN], f[MAXN][2], ans, tg[MAXN];//tg[i]==1表示修改了a[i-1]
//f[i][k]表示修改1-k次之后以i为结尾的严格上升字串长度
int main()
{
scanf ("%d", &n);
for (int i = 1; i <= n; ++ i) scanf ("%d", a + i);
for (int i = 1; i <= n; ++ i) {
f[i][0] = f[i][1] = 1;
if (a[i] > a[i - 1]) f[i][1] = f[i - 1][1] + 1;
if (a[i] > a[i - 1] && (tg[i] == 0 || a[i] - a[i - 2] > 1)) f[i][0] = f[i - 1][0] + 1;
if (f[i - 1][1] > f[i][0]) f[i][0] = f[i - 1][1] + 1, tg[i + 1] = 1;
ans = max(ans, max(f[i][0], f[i][1]));
}
printf ("%d\n", ans);
return 0;
}
请问是实现写挂了还是算法假了?(蒟蒻想了好一会没想到hack。万分感谢