感觉在哪里判断大小都可以,一个WA,一个AC

P1434 [SHOI2002] 滑雪

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

考虑极限数据,

对于 100\% 的数据,1\leq R,C\leq 100

那么构造

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


|