案例可以通过但是得分仍然为0
查看原帖
案例可以通过但是得分仍然为0
1289883
wsdmn123楼主2024/3/31 17:16

这是我的代码,给的实例都可以跑通,但是提交的时候全错,各位大佬请问这是为什么,我哪里有问题

#include<iostream>
using namespace std;

const int N = 15;
int T[N];//到达上空的时刻  T  最早  T降落
int D[N];//还可以继续盘旋的时间   最晚T+D
int L[N];//降落要的时间       等待时间+L整个过程的时间
int arr[N];//存顺序
bool st[N];//状态

int n;

bool return1 = false;
void dfs(int x) {
    if (return1) {
        return;
    }
    if (x > n) {
        int allTime = 0;
        bool return0 = true;

        for (int i = 1;i <= n;i++) {//用arr[i]衡量
            if (i == 1 ) {
                allTime = L[arr[i]];
            }
            else if (allTime >= T[arr[i]] && allTime <= T[arr[i]] + D[arr[i]]) {  //可以降落的时刻
                allTime += L[arr[i]];
            }
            else if(allTime<T[arr[i]]){    //还没有来
                 allTime=T[arr[i]]+L[arr[i]];
             }
            else if (allTime > T[arr[i]] + D[arr[i]]) {
                return0 = false;//此方法失败
                break;
            }
            
        }

        if (return0) {
            return1 = true;
        }
        return;
    }

    for (int i = 1;i <= n;i++) {
        if (!st[i]) {
            st[i] = true;
            arr[x] = i;
            dfs(x + 1);
            st[i] = false;
            arr[x] = 0;
        }
    }

}
int main() {
    int t;//组数
    cin >> t;
    while (t--) {

        cin >> n;//n个飞机

        for (int i = 1;i <= n;i++) {
            cin >> T[i] >> D[i] >> L[i];
        }
        return1 = false;
        dfs(1);//放第一个位置  过去的时间为0

        if (return1) {
            cout << "Yes" << endl;
        }
        else {
            cout << "No" << endl;
        }

    }
    return 0;
}
2024/3/31 17:16
加载中...