蒟蒻刷luogu普及試煉場遇到的題orzzz
第一眼看過去是求最長不下降子串行
但是並不是簡單的最長不下降子串行,要求輸出最長情況下的方案數
於是我們考慮吧開個陣列記錄對應下標為最後一位時的數目
1 #include2 #include3 #include4using
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 的方案數相加 但是當兩個不同的位置上存的數相同且均滿足上式時 就會產生重複 因為位置靠後的數肯...