4565 Haoi2016 字元合併 區間DP

2021-07-11 23:15:23 字數 808 閱讀 7861

令fi

,j,k

表示區間[i

,j] 合併成

k 的最大收益,其中k=

0/1保證

[i,j

] 可以合併成乙個數。

轉移的時候用gj

,k表示對於當前的

i ,[i

,j]合併成了

k ,其中

k是乙個二進位制數。

然後轉移一下就行了

#include

#include

#include

using

namespace

std;

const

int n=305;

int n,m;

int a[n],c[n],w[n];

long

long f[n][n][2],g[n][n],tmp[2],ans[n];

char s[n];

inline

int read()

while (c>='0'&&c<='9')

return a*f;

}int main()

if (++now==m)}}

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

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

ans[j]=max(ans[j],ans[i-1]+max(f[i][j][0],f[i][j][1]));

cout

<< ans[n] << endl;

return

0;}

4565 Haoi2016 字元合併

time limit 20 sec memory limit 256 mb submit 154 solved 70 submit status discuss 有乙個長度為 n 的 01 串,你可以每次將相鄰的 k 個字元合併,得到乙個新的字元並獲得一定分數。得到的新字 符和分數由這 k 個字元確...

bzoj4565 HAOI2016 字元合併

time limit 20 secmemory limit 256 mb有乙個長度為 n 的 01 串,你可以每次將相鄰的 k 個字元合併,得到乙個新的字元並獲得一定分數。得到的新字 符和分數由這 k 個字元確定。你需要求出你能獲得的最大分數。第一行兩個整數n,k。接下來一行長度為n的01串,表示初...

1767 字元合併

description 有乙個長度為 n 的 01 串,你可以每次將相鄰的 k 個字元合併,得到乙個新的字元並獲得一定分數。得到的新字 符和分數由這 k 個字元確定。你需要求出你能獲得的最大分數。input 第一行兩個整數n,k。接下來一行長度為n的01串,表示初始串。接下來2k行,每行乙個字元ci...