题解:CF727F Polycarp's problems
题意
给定一个长为
思路
设
则可得
- 选择第
个数不取,则 - 选择第
个数取,则
但我们还得要让前缀和不为负数,所以要对
最后,我们再倒序枚举
代码如下
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define rep(i, l, r) for(int i = l; i <= r; ++ i)
#define per(i, r, l) for(int i = r; i >= l; -- i)
const int N = 200010, M = 2010;
int a[N];
int f[M][M];
int n, m, x;
main()
{
scanf("%lld%lld", &n, &m);
rep(i, 1, n) scanf("%lld", &a[i]);
memset(f, 0x3f, sizeof f);
f[n + 1][0] = 0;
per(i, n, 1)
{
rep(j, 1, n - i + 1)
f[i][j] = min(f[i + 1][j], max(0ll, f[i + 1][j - 1] - a[i]));
f[i][0] = 0;
}
for(; m; -- m)
{
scanf("%lld", &x);
per(j, n, 0)
if(f[1][j] <= x)
{
printf("%lld\n", n - j);
break;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步