如果你还没学过vector,可以使用普通的数组来解决这个问题。下面是使用数组的完整C++代码实现:
#include <iostream>
using namespace std;
const int MOD = 998244353;
int main() {
int n;
cin >> n;
int a[n+1];
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
int dp[n+1][n/2+1];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; i++) {
dp[i][0] = 1;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n/2; j++) {
dp[i][j] = max(dp[i][j], dp[i-1][j]);
dp[i][j] = max(dp[i][j], dp[i-1][j-1] * a[i] % MOD);
dp[i][j] = max(dp[i][j], dp[i-1][j-1] + a[i] % MOD);
}
}
cout << dp[n][n/2] << endl;
return 0;
}
请注意,以上代码使用了动态规划的思想,使用二维数组dp来记录最大值。同时,为了避免超出数组范围,我们将n/2取整作为数组的列数,因为加法和乘法操作次数近可能相同。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |