题目

代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using uint = unsigned;const int N = 1010;ll f[N][N];
uint a[N];
int n, m;int main()
{ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= n; i++)for(int j = 0; j <= m; j++){uint x = a[i];for(int k = 0; k < 32; k++){if(j+k > m) break;f[i+1][j+k] = max(f[i+1][j+k], f[i][j] + x); x = ((x << 1) | (x >> 31 & 1)); //不能用longlong(不是32位),不能用int(是32位但是会溢出)}}ll ans = 0;for(int i = 0; i <= m; i++)ans = max(ans, f[n+1][i]);cout << ans;
}