对于第 d d d 天,每只股票两种操作:
- 不买
- 买入任意支,存几天,卖出
把第 1 1 1 天买进股票,第 3 3 3 天卖出看成:第 1 1 1 天买入,第 2 2 2 天卖出,第 2 2 2 天买入,第 3 3 3 天卖出。
操作即化为:
- 不买
- 买入任意支,第二天卖出
对每一天做一次完全背包,并更新本金。
#include<bits/stdc++.h>
using namespace std;
int n, D, m, a[55][15], f[500005];
int main()
{
ios::sync_with_stdio(false);
std::cin.tie(0);
cin >> n >> D >> m;
for(int i=1; i<=n; i++)
for(int d=1; d<=D; d++)
cin >> a[i][d];
for(int d=1; d<D; d++)
{
memset(f, 0, sizeof(f));
for(int i=1; i<=n; i++)
for(int j=a[i][d]; j<=m; j++)
f[j] = max(f[j], f[j-a[i][d]] + a[i][d+1] - a[i][d]);
m += f[m];
}
cout << m;
return 0;
}