社区讨论
?终于知道这道题为什么第一和第二个数据过不了了
P1434[SHOI2002] 滑雪参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi85z3ui
- 此快照首次捕获于
- 2025/11/21 09:10 4 个月前
- 此快照最后确认于
- 2025/11/21 09:10 4 个月前
怀疑这题第一和第二个数据有误 kkksc03memset0chen_zhe
题目上给的第一个r是行数,第二个c是列数,然而我这样写是得了80分
CPP#include<bits/stdc++.h>
using namespace std;
const int fx[]={-1,0,1,0},fy[]={0,-1,0,1};
int mapp[105][105],f[105][105],r,c;
inline int dfs(int x,int y) {
if(f[x][y]) return f[x][y];
int num=1;
for(int i=0;i<4;i++) {
int dx=x+fx[i],dy=y+fy[i];
if(dx>0&&dx<=c&&dy>0&&dy<=r&&mapp[x][y]<mapp[dx][dy]) {//c是列数,x应该小于列数,同理
num=max(num,dfs(dx,dy)+1);
}
}
f[x][y]=max(f[x][y],num);
return f[x][y];
}
int main() {
cin>>r>>c;
for(int i=1;i<=r;i++) {
for(int j=1;j<=c;j++) {
scanf("%d",&mapp[i][j]);
}
}
int ans=0;
for(int i=1;i<=r;i++) {
for(int j=1;j<=c;j++) {
ans=max(ans,dfs(i,j));
}
}
cout<<ans;
return 0;
}
AC代码
CPP#include<bits/stdc++.h>
using namespace std;
const int fx[]={-1,0,1,0},fy[]={0,-1,0,1};
int mapp[105][105],f[105][105],r,c;
inline int dfs(int x,int y) {
if(f[x][y]) return f[x][y];
int num=1;
for(int i=0;i<4;i++) {
int dx=x+fx[i],dy=y+fy[i];
if(dx>0&&dx<=r&&dy>0&&dy<=c&&mapp[x][y]<mapp[dx][dy]) {//把横坐标小于行数,应该知道这是错的,然而AC了
num=max(num,dfs(dx,dy)+1);
}
}
f[x][y]=max(f[x][y],num);
return f[x][y];
}
int main() {
cin>>r>>c;
for(int i=1;i<=r;i++) {
for(int j=1;j<=c;j++) {
scanf("%d",&mapp[i][j]);
}
}
int ans=0;
for(int i=1;i<=r;i++) {
for(int j=1;j<=c;j++) {
ans=max(ans,dfs(i,j));
}
}
cout<<ans;
return 0;
}
怀疑第一二个数据有误,请更正
如果真是我错了,请指出我的错误,谢谢管理员们或红名大佬们
回复
共 5 条回复,欢迎继续交流。
正在加载回复...