[USACO4.3]逢低吸纳Buy Low, Buy Lower
题目链接
洛谷P2687
思路
这一题第一问还简单,就是要我们求最长下降子序列。可以用n^2算法。
第二问问本质不同的最长下降子序列的种数,先不考虑本质不同,可以设a[i]为第i天的股价,f[i]为以i结尾有多长,s[i]为有多少种序列,则s[i]等于长度为f[i]-1的序列种数之和。
考虑到本质相同,其实就是重复的数字只算一次,如果a[i]==a[j]&&f[i]==f[j],(1<=j<i),那么j完全没必要保留,可以直接令s[j]=0,以后就不会被记进来了。
再提一个坑点,种数会爆long long,所以要用高精度。
code:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a[5010],f[5010];
struct int128
{
int f[100],tot;
void clear()//清零
{
for(int i=0;i<=99;i++)
f[i]=0;
tot=0;
}
void out()