题解:P14306 【MX-J27-T3】旋律
A7F3jK9pR0xf_ · · 题解
感觉不难,赛时 10min 切了。
观察到答案与值域有关,且子序列的下标对答案没有影响,所以我们考虑先排序重构整个序列,再在上面做子序列dp。
状态定义:
初始化显然是
考虑转移,每增加一个长度都会额外产生
直接做是
将转移方程拆开,发现与
#include <bits/stdc++.h>
using namespace std;
#define il inline
typedef long long ll;
const int N = 1e5 + 10;
int a[N], n, k;
ll f[N];
il void solve()
{
cin >> n >> k;
for(int i = 1;i <= n;++i) cin >> a[i];
sort(a + 1, a + 1 + n);
ll tmp = 0;
for(int i = 1;i <= n;++i)
{
f[i] = max(1ll * k, tmp + k - a[i]);
tmp = max(tmp, f[i] + a[i]);
}
ll ans = k;
for(int i = 1;i <= n;++i) ans = max(ans, f[i]);
cout << ans << "\n";
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int c, t;
cin >> c >> t;
while(t--) solve();
return 0;
}