将长度为2时单独特判pts10求助
查看原帖
将长度为2时单独特判pts10求助
903176
Trainer_Marvin楼主2023/11/8 12:01

如题,两段代码的差异是什么呢?将len==2的判断位置更改就AC了

// P3205 //
#include <bits/stdc++.h>
using namespace std;
#define int long long

int mem[1005];
int dp[1005][1005];
signed main(){
    int n;
    cin >> n;
    memset(dp, 0, sizeof(dp));
    for (int i=1; i<=n; i++){
        cin >> mem[i];
        dp[i][i] = 1;
    }
    int j;
    for (int len=2; len<=n; len++)
        for (int i=1; i<=n-len+1; i++){
            j = len + i - 1;
            if (len == 2){
                dp[i][j] = 1;
                dp[j][i] = 1;
            }
            else{
                if (mem[j] > mem[j-1])
                    dp[i][j] += dp[i][j-1];
                if (mem[i] < mem[j])
                    dp[i][j] += dp[j-1][i];
                if (mem[j] > mem[i])
                    dp[j][i] += dp[i+1][j];
                if (mem[i] < mem[i+1])
                    dp[j][i] += dp[j][i+1];
                }
                dp[j][i] %= 19650827;
                dp[i][j] %= 19650827;
            }
    cout << (dp[1][n]+dp[n][1]) % 19650827 << endl;
    return 0;
}

以上为错误代码

// P3205 //
#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main(){
    int n;
    cin >> n;
    int mem[n+1];
    int dp[n+1][n+1];
    memset(dp, 0, sizeof(dp));
    for (int i=1; i<=n; i++){
        cin >> mem[i];
        dp[i][i] = 1;
    }
    int j;
    for (int len=2; len<=n; len++)
        for (int i=1; i<=n-len+1; i++){
            j = len + i - 1;
            if (mem[j] > mem[j-1])
                dp[i][j] += dp[i][j-1];
            if (mem[i] < mem[j] && len != 2)
                dp[i][j] += dp[j-1][i];
            if (mem[j] > mem[i] && len != 2)
                dp[j][i] += dp[i+1][j];
            if (mem[i] < mem[i+1])
                dp[j][i] += dp[j][i+1];
            dp[j][i] %= 19650827;
            dp[i][j] %= 19650827;
        }
    cout << (dp[1][n]+dp[n][1]) % 19650827 << endl;
    return 0;
}

2023/11/8 12:01
加载中...