1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; const int N=50010; int n,m; int w[N]; int f[N],q[N]; bool check(int x) { int hh=0,tt=-1; q[++tt]=0; for(int i=1;i<=n;i++) { while(hh<=tt&&i-q[hh]+1>x+2) hh++; //空白题目+2个已做题 f[i]=f[q[hh]]+w[i]; //更新答案 while(hh<=tt&&f[q[tt]]>=f[i]) tt--; //维护单调队列 q[++tt]=i; } int res=2e9; for(int i=n-x;i<=n;i++) { res=min(res,f[i]); } return res<=m; //判断是否小于给定时间 } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>w[i]; } int l=0,r=n; while(l<r) { int mid=(l+r)/2; if(check(mid)) r=mid; else l=mid+1; } cout<<r; return 0; }
- 1
信息
- ID
- 775
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者