題解 低價購買

2022-06-01 19:06:11 字數 667 閱讀 6975

蒟蒻刷luogu普及試煉場遇到的題orzzz

第一眼看過去是求最長不下降子串行

但是並不是簡單的最長不下降子串行,要求輸出最長情況下的方案數

於是我們考慮吧開個陣列記錄對應下標為最後一位時的數目

1 #include2 #include3 #include4

using

namespace

std;

5int a[5005], f[5005], t[5005];//

a為原序列,f為長度,t為方案數

6int n, maxn=0;7

intmain()

16if(!f[i]) f[i]++;//

自己本身

17if(f[i]>maxn) maxn=f[i];

18for(int j=1; j)

22if(!t[i]) t[i]=1;//

自己本身23}

24int ans=0;//

記錄方案數

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

26if(f[i]==maxn) ans+=t[i];

27 printf("

%d %d

", maxn, ans);

28return0;

29 }

題解 P1108 低價購買

題目鏈結 題目大意 求乙個數列的最長下降子串行長度,以及長度最長的下降子串行的數量 動態規劃 題目分析 求最長下降子串行是常規操作了,可以直接用樸素 o n 2 演算法,也可以用二分做到 o nlogn 複雜度,不過 n leq 5000 樸素演算法隨便跑 那麼如何統計方案呢?我們 dp 求最長下降...

低價購買(動規例題)

求乙個最長不下降子串行,以及這個最長不下降子串行在這個序列裡的個數 不能重複 對於第一問我們就只要普通的dp一下就行了,以下將最長不下降子串行稱為最長序列 對於第二問這裡要詳細的講一下。狀態有如下 f i 表示到第i個數的最長序列 b i 表示到第i個數的最長序列的個數 很容易得出方程 f i ma...

P1108 低價購買

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