C6-1 最大子数组和
题目描述
给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和
输入描述第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000])
输出描述
输出一个整数表示最大子数组和
//学堂在线C++第六章编程作业题第一题
#include <iostream>
using namespace std;
int main() {
int max = -5000, n, i, x, sum = 0;
cin >> n;
cin >> x;
max = x; sum = x;
for (i = 1; i < n; ++i) {
cin >> x;
if (max < x)
max = x;
sum += x;
if (max < sum)
max = sum;
if (sum < 0)
sum = 0;
}
cout << max;
return 0;
}
C6-2 字符串的回文子序列个数
题目描述
求一个长度不超过15的字符串的回文子序列个数(子序列长度>=1)。
输入描述
输入一个长度不超过15的字符串,字符串均由小写字母表示
输出描述
输出其回文子序列个数
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string s, s1;
int leng;
cin >> s;
leng = s.length();
vector<vector<int>> dp(leng, vector<int>(leng));
for (int j = 0; j < leng; ++j) {
dp[j][j] = 1;
for (int i = j - 1; i >= 0; --i) {
dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1];
if (s[i] == s[j])
dp[i][j] += 1 + dp[i + 1][j - 1];
}
}
cout << dp[0][leng - 1];
return 0;
}
C6-3 数组第K小数
题目描述
给定一个整数数组a[0,...,n-1],求数组中第k小数
输入描述
首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n
然后输出n个整形元素,每个数的范围[1, 5000]
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, k, a[5000];
cin >> n >> k;
for (int i = 0; i < n; ++i)
cin >> a[i];
sort(a, a + n);
cout << a[k - 1];
return 0;
}
输出描述
该数组中第k小数