题目描述
C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式?
IDEA
动态规划,c个罪犯的罪值和值计算一次,每次移动指针,只需在这个sum基础上减去上一个,加上新的即可
CODE
#include<iostream>
#include<vector>
using namespace std;
int main(){
int n,t,c;
while(cin>>n>>t>>c){
vector<int> val(n);
for(int i=0;i<n;i++){
cin>>val[i];
}
int cnt=0;
int sum=0;
for(int i=0;i<c;i++){
sum+=val[i];
}
if(sum<=t){
cnt++;
}
for(int i=c;i<n;i++){
sum-=val[i-c];
sum+=val[i];
if(sum<=t){
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}