1. 程式人生 > >罪犯轉移(滑動視窗機制)

罪犯轉移(滑動視窗機制)

C市現在要轉移一批罪犯到D市,C市有n名罪犯,按照入獄時間有順序,另外每個罪犯有一個罪行值,值越大罪越重。現在為了方便管理,市長決定轉移入獄時間連續的c名犯人,同時要求轉移犯人的罪行值之和不超過t,問有多少種選擇的方式(一組測試用例可能包含多組資料,請注意處理)?
在這裡插入圖片描述
這個題目可以先把連續的c個犯人的罪行值求出來,在對剩下的犯人進行滑動視窗機制
#include
#include
#include
using namespace std;
int main()
{
int n,t,c;
while(cin>>n>>t>>c)
{
int sum=0,cnt=0;
vector v(n);
for(int i=0;i<n;i++)
{
cin>>v[i];
if(i<c)
sum+=v[i];
}
if(sum<t)
cnt++;
for(int i=0;i<n-c;i++)
{
sum+=v[c+i]-v[i];//加上當前的,就要減去開始的,因為人數是確定的
if(sum<=t)
cnt++;
}
cout<<cnt<<endl;
}
}