给定一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
请补全以下程序,以计算最大子序列和。
#include <iostream>
#include <vector>
using namespace std;
int maxSubArray(vector<int>& nums) {
int n = nums.size();
int max_sum = ①;
int current_sum = ②;
for(int i = 1; i < n; i++) {
current_sum = max(③, ④);
max_sum = max(max_sum, current_sum);
}
return max_sum;
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for(int i = 0; i < n; i++) cin >> nums[i];
cout << maxSubArray(nums) << endl;
return 0;
}
请根据以下选项,填写代码中相应的空白处:
①处应填( )
②处应填( )
③处应填( )
④处应填( )
选项:
-
①处应填:
A.
nums[0]
B.
0
C.
INT_MIN
D.
nums[n-1]
-
②处应填:
A.
nums[0]
B.
0
C.
INT_MIN
D.
nums[n-1]
-
③处应填:
A.
nums[i]
B.
current_sum + nums[i]
C.
current_sum
D.
nums[i-1]
-
④处应填:
A.
nums[i]
B.
current_sum + nums[i]
C.
current_sum
D.
nums[i-1]
第二题
(最长公共子序列问题)给定两个字符串,求它们的最长公共子序列的长度。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int LCS(string X, string Y)
{
int m = X.length();
int n = Y.length();
vector<vector<int>> L(m+1, vector<int>(n+1));
for (int i=0; i<=m; i++)
{
for (int j=0; j<=n; j++)
{
if (i==0 || j==0)
L[i][j] = ①;
else if (②)
L[i][j] = ③;
else
L[i][j] = ④;
}
}
return L[m][n];
}
int main()
{
string X, Y;
cin >> X >> Y;
cout << "Length of LCS is " << LCS(X, Y) << endl;
return 0;
}
①处应填( )
②处应填( )
③处应填( )
④处应填( )
选项:
A. 1
B. 0
C. -1
D. L[i-1][j-1]
A. X[i] == Y[j]
B. X[i-1] == Y[j-1]
C. X[i] != Y[j]
D. X[i-1] != Y[j-1]
A. L[i-1][j-1] + 1
B. L[i-1][j-1]
C. L[i][j-1] + 1
D. L[i-1][j] + 1
A. max(L[i-1][j], L[i][j-1])
B. L[i-1][j] + L[i][j-1]
C. L[i-1][j-1]
D. L[i-1][j-1] + 1
第三题
(最长回文子序列问题)给定一个字符串s
,求它的最长回文子序列的长度。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int longestPalindromeSubseq(string s) {
int n = s.size();
vector<vector<int>> dp(n, vector<int>(n));
for (int i = n - 1; i >= 0; i--) {
dp[i][i] = ①;
for (int j = i + 1; j < n; j++) {
if (②)
dp[i][j] = dp[i + 1][j - 1] + 2;
else
dp[i][j] = ③;
}
}
return dp[0][n - 1];
}
int main() {
string s;
cin >> s;
cout << "The length of the longest palindromic subsequence is " << longestPalindromeSubseq(s) << endl;
return 0;
}
请在代码中①至③处填入正确的代码,使程序能够正确计算字符串的最长回文子序列长度。
①处应填( )
②处应填( )
③处应填( )
选项:
-
①处:
A.
1
B.
0
C.
2
D.
s[i]
-
②处:
A.
s[i] == s[j]
B.
s[i+1] == s[j-1]
C.
s[i] != s[j]
D.
s[i+1] != s[j-1]
-
③处:
A.
dp[i+1][j] + dp[i][j-1]
B.
dp[i+1][j-1]
C.
max(dp[i+1][j], dp[i][j-1])
D.
dp[i][j-1] - dp[i+1][j]