P1108 低價購買dp

2022-05-13 22:58:04 字數 789 閱讀 8915

第一問,求乙個最長的下降子串行就可以了。

難點在於第二問,解決方法:

設f[i]表示到i這一位置,最長下降子串行的最大方案數;

當構成序列相同時,可以看出……呃,舉個例子吧:

****為:4 , 2 , 2 , 3 , 1

最長的下降子串行為:4 2 1 或 4 2 1 或4 3 1 ,有兩種是相同的,可以判斷出數字2,用後面的就包括前面的了。

那麼 , f[i]=σf[j],( 0< j< i 且d[j]=d[i]-1且a[j]不重複)

處理時,就可以在處理出f[i]後,把前面的f[j]==f[i]的f[j]改為0就可以了。

!!而且,當且僅當d[i]=1時,f[i]=1!!切記!

**

#include

#include

#include

#include

using

namespace

std;

int d[5009],f[5009];

int n,a[5009],m1,m2;

int main()

d[n+1]=1;f[1]=1;

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

d[i]+=maxn;

if(d[i]==1) f[i]=1;

for(int j=1;j<=i-1;j++)

P1108 低價購買 DP

給定乙個序列,求最長下降子串行,及不重複的方案數。洛谷鏈結 最長下降子串行可以用 o n 2 的簡單dp來求。不難發現 在乙個元素互不相同的序列中,不會出現重複方案,因此可以通過dp累計答案 詳見 然後考慮去重,發現以x結尾的最長序列,位置靠後的x的方案會包括位置靠前的x的方案。因此可以刪除最後乙個...

P1108 低價購買

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

P1108 低價購買

對於第一問很容易看出是求最長下降子串行,n2 的暴力就可解決。而第二問是求最優方案數 且不重複 需要判重。可以在求解最長下降子串行的基礎上增開乙個陣列 g g i 表示以 i 結尾,不同的最優方案數。include include include include include include in...