DP題目講解

2021-09-06 20:01:29 字數 783 閱讀 1691

1,題目詳見:

解析:要是個等差數列,所以要排序,讓後以i為第一項,j為第二項的最長等差數列

那麼第三項則為f[i][j]=f[j][k]+1;

可是這樣是三重迴圈,但是這滿足這樣乙個等式:a[k]-a[j]=a[j][i];

所以我麼只要列舉j,讓後i,k分別向左右列舉時間複雜度就為o(n*n)了

但是這樣還會卡時間,所以用short int來設定

但是還要用long long,也會爆,所以還要有滾動陣列來優化空間

**如下:

#includeusing namespace std;

int read()

const int n=10001;

int a[n],n;

short int f[n][n];

int main()

for(int i=p;i0)a[num]+=x;

else a[++num]=x;

}read(x);

} if(x)

if(a[num]<0)num--;

n=num;

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

if(a[i]>0)ans1+=a[i];

if(m>=n)

for(int k=j+1;k<=n;k++)b[k]=max(b[k-1],f[k-1][j%n]);

} printf("%lld",ans);

return 0;

}

這題的更高的演算法便是貪心,因為這是dp講解所以不說了

專題講解 線性DP

狀態轉移方法是乙個線性的轉移,每一行依次求解。例題 三角形最大路徑 最長上公升子串行和如何得到該序列 乙個非dp的nlgn演算法 最長子序列 編輯距離 多次編輯距離 這道題目思路不難,但是細節很多,需要統一處理儲存的三角形和dp的座標對應的關係。自下往上做更方便 n int input 這裡我多開了...

樹形dp題目彙總

1 hdu 1520 anniversary party 每個節點有權值,子節點和父節點不能同時選,問最後能選的最大價值是多少?解題報告 here 2 hdu 2196 computer 經典題,求樹每個點到其他點的最遠距離,轉化為有根樹,深搜兩次,一次記錄到葉子的最遠距離,一次更新最終答案。解題報...

附加題 DP題目

題意 給你n個數a n 求從中順序的選出k個數b k 這k個數分別進行如下操作,sum b 1 1 b 2 2 b 3 3 b k k 求使得sum最小。才開始von給我說可能需要單調佇列優化,我看看了,用單調佇列做了一下。提交不對,一看狀態轉移方程推錯了。囧.後來一看這不是乙個很典型的狀態轉移方程...