Princess Rescue

 

#include <bits/stdc++.h>
#define M 500

using namespace std;

int n;
int ans;
int dp[M+5][M+5];
int dis[M+5],st[M+5],ck[M+5];
int a[M+5][M+5];

void pro(){
    dp[0][0]=1;
    for(int k=1;k<n;k++){
        for(int i=0;i<k;i++){
            for(int j=0;j<k;j++){
                if(i==j&&i!=0){
                    continue;
                }
                if(dp[i][j]==0){
                    continue;
                }
                if(a[i][k]){
                    dp[k][j]+=dp[i][j];
                    dp[k][j]%=1000;
                }
                if(a[k][j]){
                    dp[i][k]+=dp[i][j];
                    dp[i][k]%=1000;
                }
            }
        }
    }
    /*for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cout<<dp[i][j]<<" ";
        }
        cout<<endl;
    }*/
    for(int i=0;i<n;i++){
        if(a[i][n-1]){
            ans+=dp[i][n-1];
            ans%=1000;
        }
    }
}

int main(){
    //freopen("in.txt","r",stdin);
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>dis[i]>>st[i]>>ck[i];
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(abs(dis[i]-dis[j])<=st[i]&&!(i>j&&!ck[i])){
                a[i][j]=1;
            }
        }
    }
    pro();
    cout<<ans<<endl;
    return 0;
}


Comments