令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...