程序填空题:求解买股票问题(动态规划)
“逢低吸纳”是炒股的一条成功秘诀,如果你想成为一个成功的投资者,就要遵守这条秘诀。“逢低吸纳,越低越买”,这句话的意思是每次你购买股票时的股价一定要比你上次购买时的股价低。按照这个规则购买股票的次数越多越好,看看你最多能按这个规则买几次。
```c++
#include
#include
#define N 5000
using namespace std;
int solve(int a[],int dp[],int n);
int main()
{
int A[N],dp[N];//dp[i]表示a[0..i]中以a[i]结尾的最长递减子序列的长度
int n,i;
cin>>n;
for(i=0;i cin>>A[i];
int len =;
cout< return 0;
}
int solve(int a[],int dp[],int n)
{
int i, j, ans;
for(i=0;i {
dp[i] = 1; //初始化递减子序列长度的最大值
for(j=0;j ai
{
if(a[j] > a[i])
{
dp[i]=;
}
}
}
ans=dp[0];
for (i = 1; i < n; i++) //求所有递减子序列的最大长度
ans=;
; //返回最长递减子序列的长度
}
```
### 输入格式:
第1行为正整数N(1≤N≤5000)表示能买股票的天数;第2行以下是N个正整数,第i个正整数表示第i天的股价。
```in
12
6869 54 64 68 64 70 67 78 62 98 87
```
### 输出格式:
输出一行表示能够买进股票的最多天数。
```out
4
```
答案:
第1空: solve(A,dp,n)
第2空:max(dp[i],dp[j]+1)
第3空:max(ans,dp[i])
第4空:return ans
```c++
#include
#include
#define N 5000
using namespace std;
int solve(int a[],int dp[],int n);
int main()
{
int A[N],dp[N];//dp[i]表示a[0..i]中以a[i]结尾的最长递减子序列的长度
int n,i;
cin>>n;
for(i=0;i
int len =;
cout<
}
int solve(int a[],int dp[],int n)
{
int i, j, ans;
for(i=0;i
dp[i] = 1; //初始化递减子序列长度的最大值
for(j=0;j ai
{
if(a[j] > a[i])
{
dp[i]=;
}
}
}
ans=dp[0];
for (i = 1; i < n; i++) //求所有递减子序列的最大长度
ans=;
; //返回最长递减子序列的长度
}
```
### 输入格式:
第1行为正整数N(1≤N≤5000)表示能买股票的天数;第2行以下是N个正整数,第i个正整数表示第i天的股价。
```in
12
6869 54 64 68 64 70 67 78 62 98 87
```
### 输出格式:
输出一行表示能够买进股票的最多天数。
```out
4
```
答案:
第1空: solve(A,dp,n)
第2空:max(dp[i],dp[j]+1)
第3空:max(ans,dp[i])
第4空:return ans