穿梭时间的画面的钟 从反方向 开始移动|

tmjyh09

园龄:3年2个月粉丝:1关注:3

题解 CF1703G Good Key, Bad Key

先放个代码。

int n, k;
cin >> n >> k;
vector<vector<int>> a(n + 5, vector<int>(35));
for (int i = 1; i <= n; i ++ )
{
cin >> a[i][0];
for (int j = 1; j <= 30; j ++ ) a[i][j] = a[i][j - 1] / 2;
}
vector<vector<LL>> f(n + 5, vector<LL>(35));
for (int i = 1; i <= n; i ++ )
{
for (int j = 0; j <= min(i, 30); j ++ )
{
f[i][j] = -infLL;
if (!j) f[i][j] = max(f[i][j], f[i - 1][j] + a[i][j] - k);
else f[i][j] = max(f[i - 1][j] + a[i][j] - k, f[i - 1][j - 1] + a[i][j]);
}
if (i > 30) f[i][30] = max(f[i][30], f[i - 1][30]);
}
cout << *max_element(all(f[n])) << "\n";

本文作者:tmjyh09

本文链接:https://www.cnblogs.com/tmjyh09/p/16942836.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   tmjyh09  阅读(23)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起