题目是构造题
先从最简单的条件开始,因为规定n<2000;
所以绝对给不了大于2000的序列;
因为L只给定最小值,所以干脆让L最大;
即L=1999;
题目所给的错误的算法,是在最大连续子序列和(dp)的基础上,乘以序列长度,所以构造一个除第一个数以外,使序列和不断递增的序列;
即 对于 2<=i<=1999 ai>0;
a1为负数 不如让 a1=-1;
a2~a1999为正数 不如使其大于1;
考虑必须大于k,所以构造
i=2~1999 sum(ai)=1999+k;
这样就构造出了错误的序列和 1998*(1999+k)
和正确的序列和 1999*(1998+k)
相减恰好为k;
需要注意的是 每一项最大只有 10^6 所以如果直接将k加到某一项 会wa
代码如下:
#include <bits/stdc++.h>
using namespace std;
//构造题