1.股票买卖
DP做法
#include <iostream>
using namespace std;
const int N = 1e5 + 10, INF = 0x3f3f3f3f;
int n;
int w[N];
int f[N][2];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%d", &w[i]);
// 注意初始条件
f[0][1] = -INF;
for (int i = 1; i <= n; ++i) {
f[i][0] = max(f[i - 1][0], f[i - 1][1] + w[i]);
f[i][1] = max(f[i - 1][1], f[i - 1][0] - w[i]);
}
printf("%d\n", f[n][0]);
return 0;
}
贪心做法
- 找到规律
如果目前股票价值大于前面的股票价值,肯定不丢.
如果小于前面股票价值,那就赶紧润!
if(nums[i] > nums[i-1]) {
res += nums[i] - nums
}
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
//f[i][1] 持股,f[i][0]卖出
int n,nums[N],f[N][2];
int main()
{
cin >> n;
for(int i = 1;i <= n;i ++) {
cin >> nums[i];
}
int res = 0;
for(int i = 2;i <= n+1;i ++ ) {
if(nums[i] > nums[i-1]) {
res += nums[i] - nums[i-1];
}
}
cout << res;
return 0;
}
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。以下是贪心算法的一些重点知识:
- 贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。
- 贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。
- 贪心算法的关键是选择适当的贪心策略,策略的选择会影响算法的优劣和实用性。
- 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。
贪心算法的难点主要表现在以下几个方面:
- 贪心策略的选择:选择适当的贪心策略是贪心算法的关键,策略的选择会影响算法的优劣和实用性。
- 处理复杂问题的能力:贪心算法通常适用于较为复杂的问题,如背包问题、旅行商问题等,需要有较强的数据处理和问题分析能力。
- 贪心策略的实现:贪心算法是一种迭代过程,需要实现每一步的贪心策略,并将其整合到整体求解过程中。
- 回溯与最优解的确认:由于贪心算法不是对所有问题都能得到整体最优解,因此需要确定所得到解的最优性。
- 处理动态问题的能力:贪心算法通常适用于静态问题,对于动态问题需要重新考虑贪心策略和实现方法。