求大佬找错

P1434 [SHOI2002] 滑雪

_skyline @ 2018-07-18 20:56:57

#include<bits/stdc++.h>
using namespace std;
struct doa{
    int x;
    int y;
    int h;
}e[10050];
int f[10050];
bool camp(doa x,doa y){return x.h>y.h;}//
int m,n;
bool check(int x,int y){
    if(e[x].x==e[y].x){
        if((e[x].y==e[y].y+1||e[x].y==e[y].y-1)&&f[x]<f[y]+1){
            return true;
        }
    }
    else if(e[x].y==e[y].y){
        if((e[x].x==e[y].x+1||e[x].x==e[y].x-1)&&f[x]<f[y]+1){
            return true;
        }
    }
    return 0;
}
int main(){
    int ans=0;
    scanf("%d%d",&m,&n);
    int i=1;
    for(int x=1;x<=m;x++){
        for(int y=1;y<=n;y++,i++){
            scanf("%d",&e[i].h);
            e[i].x=x;
            e[i].y=y;
        }
        }
        i--;
        sort(e+1,e+1+i,camp);
        for(int x=1;x<=i;x++){
            f[x]=1;
        }
    for(int x=i;x>=1;x--){
        for(int y=i;y>=x+1;y--){
            if(check(x,y)){
                f[x]=f[y]+1;
                if(f[x]>ans){
                    ans=f[x];
                }
            }
        }
    }
    printf("%d",ans);
    return 0;
}

by xiangling @ 2018-07-18 21:17:21

您的思路和我差不多,我记得用地推做有几个坑点,我找一下以前的代码。。。


by xiangling @ 2018-07-18 21:20:47

if(judge(i,k)&&a[i].l>max_len&&a[i].sum<a[k].sum)max_len=a[i].l;

其中judge(i,k)的代码为:

inline bool judge(int i,int k)
{
    if(abs(a[i].x-a[k].x)==1&&abs(a[i].y-a[k].y)==0)return true;
    if(abs(a[i].x-a[k].x)==0&&abs(a[i].y-a[k].y)==1)return true;
    return false;
}

by _skyline @ 2018-07-19 07:35:37

@rainman 谢谢


|