1.dp
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int pre = 0, maxAns = nums[0];
for (const auto &x: nums) {
pre = max(pre + x, x);
maxAns = max(maxAns, pre);
}
return maxAns;
}
};
2.dp
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int n = nums.size();
if (n == 0) {
return 0;
}
vector<int> dp(n, 0);
for (int i = 0; i < n; ++i) {
dp[i] = 1;
for (int j = 0; j < i; ++j) {
if (nums[j] < nums[i]) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
}
return *max_element(dp.begin(), dp.end());
}
};
3.dp,只需要考虑一边,最后平方
class Solution {
long long const N=1e9+7;
public:
int countHousePlacements(int n) {
vector<long long> f(n + 1);
if (n == 1) return 4;
if (n == 2) return 9;
f[1] = 2;
f[2] = 3;
for (int i = 3; i <= n; ++i) {
f[i] = (f[i - 1] + f[i - 2]) % N;
}
return f[n] * f[n] % N;
}
};