请为以下代码设计几个测试用例:#include <bits/stdc++.h> #define endl "\n" #pragma GCC optimize(3,"Ofast","inline") using namespace std; const int maxn = 262150; const int max_sum = 60; int a[maxn]; int dp[maxn][max_sum];
int main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; }
int maxv = 0;
for (int j = 1; j <= max_sum; j++) {
for (int i = 1; i <= n; i++) {
if (a[i] == j)
dp[i][j] = i + 1;
else {
dp[i][j] = dp[dp[i][j - 1]][j - 1];
}
if (dp[i][j])
maxv = max(maxv, j);
}
}
for (int j = 1; j <= max_sum; j++) {
for (int i = 1; i <= n; i++) {
cout << dp[i][j] << " ";
}
cout << endl;
}
cout << maxv << endl;
return 0;
}
为了测试这段代码,我们需要设计一些测试用例来验证其功能和性能。以下是几个测试用例:
输入:
1
1
预期输出:
1
解释: 只有一个元素,最大和为1。
输入:
5
2 2 2 2 2
预期输出:
2
解释: 所有元素都相同,最大和为2。
输入:
5
1 2 3 4 5
预期输出:
5
解释: 每个元素都可以形成一个和为其自身的子序列,最大和为5。
输入:
6
0 -1 2 3 -2 4
预期输出:
4
解释: 尽管有负数和零,最大和为4。
输入:
10
3 1 4 1 5 9 2 6 5 3
预期输出:
9
解释: 最大和为9。
输入:
262150
1 1 1 ... (262150个1)
预期输出:
1
解释: 所有元素都相同,最大和为1。
输入:
5
5 4 3 2 1
预期输出:
5
解释: 每个元素都可以形成一个和为其自身的子序列,最大和为5。
输入:
7
1 3 2 4 3 5 2
预期输出:
5
解释: 最大和为5。
输入:
5
60 60 60 60 60
预期输出:
60
解释: 所有元素都相同,最大和为60。
输入:
6
1 2 2 3 3 4
预期输出:
4
解释: 最大和为4。
这些测试用例涵盖了不同的输入情况,包括最小输入、所有元素相同、递增序列、包含零和负数、随机大输入、最大边界测试、递减序列、混合序列、所有元素为最大和以及包含重复元素。通过这些测试用例,可以全面验证代码的正确性和性能。