下不了测试点,80分弱求助

P1434 [SHOI2002] 滑雪

Xunxas @ 2020-06-21 18:49:07


#include <iostream>
#include<queue>
#include<string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

struct xun
{
    int i=0,j=0,num=0;
};

struct cmp1
{
    bool operator()(const xun a,const xun b)
    {
        return a.num>b.num;
    }
};

priority_queue<xun,vector<xun>,cmp1>q;

int z[102][102]={};
int total[102][102]={};

int main(int argc, char** argv) {

    memset(total,0,sizeof(total));

    for(int i=1;i<=101;i++)
    for(int j=1;j<=101;j++)
    total[i][j]=1;

    int a,b;
    cin>>a>>b;

    for(int i=1;i<=b;i++)
    for(int j=1;j<=a;j++)
    {
        xun asa;
        cin>>asa.num;

        z[i][j]=asa.num;

        asa.i=i;
        asa.j=j;
        q.push(asa);
    }

    while(!q.empty())
    {
        xun p=q.top();
        int i=p.i;
        int j=p.j;
        int num=p.num;
        q.pop();

        if( num>z[i-1][j]   )total[i][j]=max(total[i-1][j]+1,total[i][j]);
        if( num>z[i+1][j]   )total[i][j]=max(total[i+1][j]+1,total[i][j]);
        if( num>z[i][j+1]   )total[i][j]=max(total[i][j+1]+1,total[i][j]);
        if( num>z[i][j-1]   )total[i][j]=max(total[i][j-1]+1,total[i][j]);
    }

    int xunxas=-1;

    for(int i=1;i<=b;i++)
    for(int j=1;j<=a;j++)
    xunxas=max(xunxas,total[i][j]);

    cout<<xunxas;

    return 0;
}

by 鬼·烨弑 @ 2020-06-21 19:11:33

@Xunxas

应该是没判边界。

这是AC的代码

#include <iostream>
#include<queue>
using namespace std;
struct xun{int i=0,j=0,num=0;};
struct cmp1
{
    bool operator()(const xun a,const xun b)
    {
        return a.num<b.num;
    }
};
priority_queue<xun,vector<xun>,cmp1>q;
int z[102][102],total[102][102];
int main() 
{
    for(int i=1;i<=101;i++) for(int j=1;j<=101;j++) total[i][j]=1;
    int a,b; cin>>a>>b;
    for(int i=1;i<=a;i++)
    for(int j=1;j<=b;j++)
    {
        xun asa;
        cin>>asa.num;
        z[i][j]=asa.num;
        asa.i=i;
        asa.j=j;
        q.push(asa);
    }

    while(!q.empty())
    {
        xun p=q.top();
        int i=p.i;
        int j=p.j;
        int num=p.num;
        q.pop();
        if(num > z[i-1][j] && i > 1)total[i - 1][j]=max(total[i - 1][j],total[i][j] + 1); //!!
        if(num > z[i+1][j] && i < a)total[i + 1][j]=max(total[i+1][j],total[i][j] + 1);//!!
        if(num > z[i][j+1] && j < b)total[i][j + 1]=max(total[i][j+1],total[i][j] + 1);//!!
        if(num > z[i][j-1] && j > 1)total[i][j - 1]=max(total[i][j-1],total[i][j] + 1);//!!
    }

    int xunxas=-1;
    for(int i=1;i<=a;i++)
    for(int j=1;j<=b;j++)
    xunxas=max(xunxas,total[i][j]);
    cout<<xunxas;

    return 0;
}

by Xunxas @ 2020-06-22 17:17:14

谢谢大佬


|