Как решить задачи с помощью динамического про

Прошу помочь с задачей, проходит только на 48/100, на каких данных не работает не могу понять Условие: В ресторане собираются N посетителей. Посетитель с номером i, имеющий сумму денег Pi и полноту Si, подходит к двери ресторана во время Ti. Входная дверь ресторана имеет K состояний открытости. Состояние открытости двери может изменяться на одну единицу за единицу времени: дверь открывается на единицу или остается в том же состоянии. В начальный момент времени дверь закрыта(состояние 0). Посетитель с номером i входит в ресторан только в том случае, если дверь открыта специально для него, то есть когда состояние открытости двери совпадает с его степенью полноты Si. Если в момент прихода посетителя состояние двери не совпадает с его степенью полноты, то посетитель уходит и больше не возвращается. Ресторан работает в течение времени T. Требуется, правильно открывая и закрывая дверь, добиться того, чтобы за время работы ресторана в нем собрались посетители, общая сумма денег у которых максимальна.

Входные данные

В первой строке находятся значения N, K, T, разделенные пробелами (1<=N<=100,1<=K<=100;0<=T<=10000) Во второй строке находятся времена прихода посетителей T1, T2,..., TN, разделенные пробелами ( 0<=Ti<=T, для всех i=1, 2, ..., N) В третьей строке находятся величины суммы денег у посетителей P1, P2,..., PN, разделенные пробелами(0<=Pi<=300, для всех i=1, 2, ..., N)). В четвертой строке находятся значения степени полноты посетителей S1, S2,..., SN, разделенные пробелами (1<=Si<=K, для всех i=1, 2, ..., N). Все исходные данные - целые числа Выходные данные

Выводится одно число - максимальная сумма денег у посетителей ресторана. В случае, если нельзя добиться прихода в ресторан ни одного посетителя, выходной файл должен содержать значение 0.

Пример входных данных

4 10 20

10 16 8 16

10 11 15 1

10 7 1 8

Пример выходных данных

26

#include <iostream>   
using namespace std;
 
int main()   
{   
    int n,k,time,i,j,max,ii,temp;   
    int t[100],p[100],s[100],a[2][101];   
    cin>>n>>k>>time;   
    for(i=0;i<n;i++)   
        cin>>t[i];   
    for(i=0;i<n;i++)   
        cin>>p[i];   
    for(i=0;i<n;i++)   
        cin>>s[i];   
    for(j=0;j<=k;j++)   
    {   
        a[0][j]=0;   
    }   
    for(i=0;i<n-1;i++)   
        for(j=i+1;j<n;j++)   
            if (t[i]>t[j])   
            {   
                temp=t[i];   
                t[i]=t[j];   
                t[j]=temp;   
                temp=s[i];   
                s[i]=s[j];   
                s[j]=temp;   
                temp=p[i];   
                p[i]=p[j];   
                p[j]=temp;   
            }   
    ii=1;temp=0;   
    while (t[temp]==0)   
        temp++;   
    for(i=1;i<=time&&temp<n;i++)   
    {   
        for(j=0;j<=k;j++)   
        {   
            a[ii][j]=0;   
            if (j>0&&a[1-ii][j-1]>a[ii][j]) a[ii][j]=a[1-ii][j-1];   
            if (a[1-ii][j]>a[ii][j]) a[ii][j]=a[1-ii][j];   
            if (j<k&&a[1-ii][j+1]>a[ii][j]) a[ii][j]=a[1-ii][j+1];   
        }   
        while (temp<n&&t[temp]==i)   
        {   
            if(s[temp]<=i)   
                a[ii][s[temp]]+=p[temp];   
            temp++;   
        }   
        ii=1-ii;   
    }   
    max=0;   
    for(i=0;i<=k;i++)   
        if(max<a[1-ii][i]) max=a[1-ii][i];   
    cout<<max<<endl;   
}

Ответы (0 шт):