DP中乙個小思路

2021-10-08 11:19:51 字數 2187 閱讀 1758

如果乙個dp的狀態轉移過程中同時需要記錄兩個物品的狀態,那麼有時可以通過記錄這兩個物品狀態的差值的方式來進行記錄,可以將dp陣列壓掉一維

d p[

i][j

][k]

[0/1

]dp[i][j][k][0/1]

dp[i][

j][k

][0/

1]表示位於座標 (i,

j)

(i, j)

(i,j

) 時小auim多吸的魔液數為 k

kk, 且吸收此格魔液的人物為小a(0)

(0)(0

) /uim(1)

(1)(1

) 時的方案數

高畫質無碼 標程如下:

#include

#include

#define maxn 805

#define maxk 20

#define mod 1000000007

#define mod(x, y) (((x) + (y)) % (y))

using

namespace std;

int n, m, k0;

int a[maxn]

[maxn]

;int dp[maxn]

[maxn]

[maxk][2

];long

long ans;

intmain()

for(

int i =

1; i <= n;

++i)

for(

int j =

1; j <= m;

++j)

ans +

= dp[i]

[j][0]

[1], ans %

= mod;

printf

("%lld"

, ans)

;return0;

}

這題我還被卡常了,mmp

d p[

i][j

]dp[i][j]

dp[i][

j]表示考慮到第 i

ii 種烹飪方法,使用食材 k

kk 烹飪的菜數比不使用食材 k

kk 烹飪的菜數多 j

jj 道時的方案數,算出總方案數,再用總方案數減去 dp[

n][j

](

j>0)

dp[n][j] \ (j>0)

dp[n][

j](j

>0)

時的情況,即為最終答案

高畫質無碼標程如下:

#include

#include

#define maxn 110

#define maxm 2010

#define mod 998244353

using

namespace std;

int n, m;

int a[maxn]

[maxm]

;// 表示烹飪方法為 i 時的總方案數為 sum[i]

long

long sum[maxn]

;/**

* 表示考慮到第 i 種烹飪方法,

* 選擇食材 k 的菜比不選食材 k 的菜多 j 道時

* 所得到的方案數,

* 從中選出 fil[n][j] (j > 0) 的部分即為不合法的部分

*/long

long fil[maxn]

[maxn *2]

;// 開大一倍為了存下偏移量

long

long ans =1;

long

long tot =0;

intmain()

for(

int i =

1; i <= n;

++i)

tot +

= fil[n]

[i + maxn]

, tot %

= mod;

}printf

("%lld"

,(ans - tot + mod)

% mod)

;return0;

}

居中乙個元素

1.行內元素水平居中 利用 text align center 可以實現在塊級元素內部的行內元素水平居中。此方法對inline inline block inline table和inline flex元素水平居中都有效。parent此外,如果塊級元素內部包著也是乙個塊級元素,我們可以先將其由塊級元...

乙個保密思路

如果你機子被入侵,那麼你最擔心的是什麼?那麼怎麼保護自己呢?這個時候乞求防毒軟體 防火牆,恐怕早沒什麼效果。基於上面的擔心考慮,我想出乙個不是萬能的辦法 1 寫乙個程式,感染本機內除系統目錄外的全部檔案,或者感染你指定的機密檔案。2 程式會自動的在所有源 檔案中插入特定 函式。3 本級每次啟動建立多...

如何居中乙個div?如何居中乙個浮動元素?

居中乙個div 給div設定乙個寬度,margin 0px auto。position absolute top 50 left 50 transform translate 50 50 彈性盒居中 justify content center align items center 居中乙個浮動元素...