動態規劃訓練之十七

2022-01-29 08:58:15 字數 783 閱讀 2505

今天的考試題目中有單調佇列優化dp的,感覺不太熟練,所以練幾手題

其實這題就是今天的t2!!!!

首先是dp很明確

dp[i,0]表示處理了前i個位置,並且第i個位置不選的最大值

dp[i,1]表示處理了前i個位置,並且第i個位置要選的最大值

明顯dp[i,0]=max(dp[i-1,0],dp[i-1,1]);

dp[i,1]=dp[j,0]+sum[i]-sum[j],(i-k<=j又是維護移動區間,維護遞減的單調佇列

code by wzxbeliever:

#include#define ll long long

#define il inline

#define ri register int

#define lowbit(x) x&(-x)

using namespace std;

const int maxn=1e5+5;

int n,k,head=1,tail=1;

il ll maxl(ll a,ll b)

ll num[maxn],a[maxn],sum[maxn],dp[maxn][2];

int main()

printf("%lld\n",maxl(dp[n][0],dp[n][1]));

return 0;

}

動態規劃訓練之十七

題目描述 求所有 0,0 走到 n,m 路線 k 矩形個數 分析 考慮如果只是求方案數的話 很簡單乙個遞推dp i,j dp i 1,j dp i,j 1 也是乙個組合數c n m,n 再考慮把面積加上進行遞推 重新定義dp i,j 走到 i,j 之前所有方案的k矩形個數和 如果我們考慮每次豎著看一...

動態規劃訓練之十九

題目大意 o n 求出乙個序列的本質不同的子串行個數 考慮動態規劃 dp i 表示前i位子序列的個數 很顯然如果沒有本質不同的話,子串行個數等同於子集的個數就是2n 1 但關鍵就在於這個本質不同?怎麼辦?當然考慮容斥 記vis a i 表示上一次a i 出現的位置 只要dp的時候減掉dp vis a...

動態規劃訓練之九

首先能夠想到是狀壓dp模板 取dp state,i,j 表示state狀態下倒數第二個島為i,最後乙個島為j時的最優解,num state,i,j 為相應的路徑數目,其中state的二進位制表示的i位為1表示島i被訪問過,反之為0。則顯然當有邊 i,j 存在時,有如下初值可賦 dp 1,表示此時可以...