复杂度O(3∗n∗k)O(3*n*k)O(3∗n∗k),目测只能过80%的数据,请dalao帮忙给出优化✧(≖ ◡ ≖✿)
#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int,int> pii;
ll dp[2][4][1005];
int n,k,a[100005],v[100005];
int main() {
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
v[i] = a[i];
v[i]%=k;
}
memset(dp,-0x3f3f3f3f,sizeof dp);
dp[0][0][0] = 0;
int d = 0;
for(int i = 1; i <= n; ++i) {
for(int j = 0; j < k; ++j) {
for(int p = 0; p <= 3; ++p) {
if(i < p) continue;
dp[d^1][p][j] = max(dp[d^1][p][j],dp[d][p][j]);
if(p > 0) dp[d^1][p][j] = max(dp[d^1][p][j],dp[d][p-1][((j-v[i])%k+k)%k]+a[i]);
}
}
d ^= 1;
}
cout << dp[d][3][0] << endl;
return 0;
}
1605



被折叠的 条评论
为什么被折叠?



