Phyllis_ @ 2022-10-17 21:54:10
程序中有一段注释,感觉放在if中或不放都可以,可是放在if中就会WA两个点,大佬们有什么特判数据吗
#include <bits/stdc++.h>
using namespace std;
int r,c;
const int maxn = 510;
int a[maxn][maxn],dp[maxn][maxn];
struct node{
int x,y,sum;
};
struct cmp_1{
bool operator()(node x,node y){
return x.sum>y.sum;
}
};
priority_queue<node,vector<node>,cmp_1> q;
int b[4][2] = {1,0,-1,0,0,-1,0,1};
int ans;
int main(){
cin >> r >> c;
for(int i = 1; i <= r; i++){
for(int j = 1; j <= c; j++){
dp[i][j] = 1;
cin >> a[i][j];
node num;
num.x = i,num.y = j,num.sum = a[i][j];
q.push(num);
}
}
while(!q.empty()){
node num = q.top();
q.pop();
for(int k = 0; k < 4; k++){
int xx = num.x + b[k][0],yy = num.y + b[k][1];
if(xx > 0 && yy > 0 && xx <= r && yy <= c &&num.sum > a[xx][yy]) {
dp[num.x][num.y] = max(dp[xx][yy] + 1,dp[num.x][num.y]);
}
}
ans = max(ans,dp[num.x][num.y]);//这里不知道为什么不能放在if中
}
cout << ans;
return 0;
}
by xingke233 @ 2022-10-18 07:06:52
@May_Emma
考虑极限数据,
对于
那么构造
1 1
1
在 if 里输出为 0
在外输出 1
因为 ans 初始值为 0
by xingke233 @ 2022-10-18 07:07:22
@May_Emma
将 ans 初始值定为 1
在 if 外也能 AC
by Phyllis_ @ 2022-10-18 19:38:26
@xingke233 OKOK~谢谢大佬!!~~ ヾ(≧▽≦*)o