P1508 Likecloud-吃、吃、吃

来源:互联网 发布:淘宝网老女式健美裤 编辑:程序博客网 时间:2024/04/26 13:04

题目传送

dp或者记忆化搜索都可以过吧。
但是我的记忆化搜索莫名其妙的WA了。
dp轻松AC.

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<algorithm>#include<cstdlib>#define LL long longusing namespace std;int f[209][209],a[209][209];int n,m,ans;int main(){    memset(f,128,sizeof(f));    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++)     for(int j=1;j<=m;j++)      scanf("%d",&a[i][j]);    for(int i=1;i<=m;i++) f[1][i]=a[1][i];    for(int i=2;i<=n+1;i++)    {        for(int j=1;j<=m;j++)        {            int p=max(f[i-1][j-1],max(f[i-1][j+1],f[i-1][j]));            f[i][j]=max(f[i][j],p+a[i][j]);        }    }    printf("%d",f[n+1][m/2+1]);    return 0;}

待查错的记忆化搜索

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<algorithm>#include<cstdlib>#define LL long longusing namespace std;int f[209][209],a[209][209];int n,m,ans,minn;int dfs(int x,int y){    if(x==0) return 0;    int tot=-1e9;    tot=max(tot,f[x-1][y]!=minn?f[x-1][y]:f[x-1][y]=(dfs(x-1,y)+a[x][y]));    if(y-1>=1) tot=max(tot,f[x-1][y-1]!=minn?f[x-1][y-1]:f[x-1][y-1]=(dfs(x-1,y-1)+a[x][y]));    if(y+1<=m) tot=max(tot,f[x-1][y+1]!=minn?f[x-1][y+1]:f[x-1][y+1]=(dfs(x-1,y+1)+a[x][y]));    return f[x][y]=tot;}int main(){    memset(f,128,sizeof(f));    minn=f[0][0];    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++)     for(int j=1;j<=m;j++)      scanf("%d",&a[i][j]);    ans=dfs(n+1,m/2+1);    printf("%d",ans);    return 0;}
原创粉丝点击