洛谷 P1108 低價購買

2021-08-21 07:20:08 字數 623 閱讀 1092

題目:低價購買

思路:第一問求最長下降子串行,o(n^2)的複雜度就夠了。

第二問如果不考慮重複的情況,也好做。

令g[i]表示最長下降子串行長為f[i]時的方案數,g[i]=σ g[j],j∈[1,i),最終方案數為σ g[i],i∈[1,n]

然後再減去重複的情況。

假設存在一組i,j使得f[i]==f[j]且a[i]==a[j],那麼可以看出,g[j]一定包含g[i],所以可以直接讓g[i]=0去除重複。

**:

#includeusing namespace std;

#define maxn 5000

int n;

int a[maxn+5]=;

int f[maxn+5]=,g[maxn+5]=;

void readin()

}void dp()

for(int j=1;jif(!g[i]) g[i]=1; }}

void print()

printf("%d",s);

int cnt=0;

for(int i=1;i<=n;i++)

printf(" %d",cnt);

}int main()

洛谷P1108 低價購買

題目鏈結 n 5000 n 2的演算法是可以接受的 第乙個數字顯然是求最長下降子串行,可以n 2或nlogndp 要求方案數,可以在n 2演算法中做一些修改,dp求方案數 dp i 表示以第i個數為結尾的最長下降子串行 f i 表示以第i個數為結尾的最長下降子串行的個數 當a j 而當a i a j...

洛谷P1108 低價購買

1 include2 using namespace std 3const int maxn 5005 4 int n,len ans 1 ans 5int a maxn d maxn len maxn f maxn 6int search int l,int r,int val 714 retur...

P1108 低價購買

原題鏈結 d i 是以 i 這個位置結束的最長下降子串行的長度 第一問就是求個最長下降子串行 第二問 記錄以 i 這個位置結束 長度為d i 的下降子串行的方案總數 d i d j 1 1 j i 的 j 的方案數相加 但是當兩個不同的位置上存的數相同且均滿足上式時 就會產生重複 因為位置靠後的數肯...