第一次TLE
#include<bits/stdc++.h>
#define int long long
using namespace std;
void fileio()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
}
void fileclose()
{
fclose(stdin);
fclose(stdout);
}
int gcd(int a,int b)
{
return b ? gcd(b,a%b) : a;
}
int T;
int n,k,x;
const int N = 2e6 + 10;
int a[N];
int sumak[N];
int dp[N][25];
void solve()
{
cin >> n >> k >> x;
int cnt = 0;
for(int i = 1;i <= n;i ++) cin >> a[i];
memset(sumak,0,sizeof sumak);
memset(dp,-1e9-1,sizeof dp);
if(x < 0) k = n - k;
x = x > 0 ? x : -x;
for(int i = 1;i <= n;i ++) sumak[i] += sumak[i - 1] + a[i];
for(int i = k;i <= n;i ++) for(int j = 1;j <= k;j ++) dp[i][j] = sumak[i] - sumak[i-j] + j*x;
int res = -1e9-1;
for(int i = k;i <= n;i ++) for(int j = 1;j <= k;j ++)
res = max(dp[i][j],res);
for(int i = 1;i < k;i ++) for(int j = 1;j <= i;j ++)
dp[i][j] = sumak[i] - sumak[i-j] + j * x;
for(int i = 1;i < k;i ++) for(int j = 1;j <= i;j ++)
res = max(dp[i][j],res);
if(res < 0){
cout << "0" << endl;
return;
}
cout << res << endl;
return;
}
signed main()
{
fileio();
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> T;
while(T --) solve();
fileclose();
}
第二次TLE
#include<bits/stdc++.h>
#define int long long
using namespace std;
int T;
int n,k,x;
const int N = 2e5 + 10;
int a[N];
int sumak[N];
int dp[N][25];
void solve()
{
cin >> n >> k >> x;
int cnt = 0;
for(int i = 1;i <= n;i ++) cin >> a[i];
memset(sumak,0,sizeof sumak);
memset(dp,-1e9-1,sizeof dp);
if(x > 0){
for(int i = 1;i <= n;i ++) sumak[i] += sumak[i - 1] + a[i];
for(int i = k;i <= n;i ++) for(int j = 1;j <= k;j ++) dp[i][j] = sumak[i] - sumak[i-j] + j*x;
int res = -1e9-1;
for(int i = k;i <= n;i ++) for(int j = 1;j <= k;j ++)
res = max(dp[i][j],res);
for(int i = 1;i < k;i ++) for(int j = 1;j <= i;j ++)
dp[i][j] = sumak[i] - sumak[i-j] + j * x;
for(int i = 1;i < k;i ++) for(int j = 1;j <= i;j ++)
res = max(dp[i][j],res);
if(res < 0){
cout << "0" << endl;
return;
}
cout << res << endl;
return;
}
else
{
memset(dp,0,sizeof dp);
int ans[26];memset(ans,-1e18,sizeof ans);
int res = -1e9-1;
x = -x;
for(int i = 0;i <= k;i ++)
for(int j = 1 + i;j <= 1 + i + n - k - 1;j ++)
{
dp[j][i] = max(dp[j - 1][i],dp[j][i]) + x + a[j];
ans[i] = max(a[i],dp[j][i]);
}
for(int i = 0;i <= k;i ++)
res = max(res,ans[i]);
if(res < 0){
cout << "0" << endl;
return;
}
cout << res << endl;
return;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> T;
while(T --) solve();
}