社区讨论

将长度为2时单独特判pts10求助

P3205[HNOI2010] 合唱队参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lop8hmrg
此快照首次捕获于
2023/11/08 12:02
2 年前
此快照最后确认于
2023/11/08 15:46
2 年前
查看原帖
如题,两段代码的差异是什么呢?将len==2的判断位置更改就AC了
CPP
// 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;
}
以上为错误代码
CPP
// 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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...