社区讨论
将长度为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 条回复,欢迎继续交流。
正在加载回复...