• hdoj1028;他们说这题叫dp...


    #include<cstdio>
    #include<string>
    #include<iostream>
    #include<vector>
    #include<queue>
    #include<stdlib.h>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    long long dp[40][40];
    char a[40][40];
    int n;
    
    //dp数组代表走到了(i,j)的方法;
    //你要走到(i,j)的话肯定是从上或者从左边走到(i,j)然后就是大的for两层,在每个(i,j)for一下从上和从左到(i,j)的数字,
    //如果可以的话,该点的dp[i][j]就加上那个可以的点的dp[i][j]值,不要觉得很奇怪,因为是可以的。在我无数次地试方法输出DP数组的时候
    //就是ok了,这样写,我不知道为什么,啊哈哈哈哈,就是这样写,你要贴代码就贴代码,反正这题破DP就是自己完完全全地自己打出来的
    //其实这道题目的意思不在这道题,想表达的意思是不要看题解做题,实在不会做看题解,主要看思路,然后可以叉掉题解,自己想然后打代码,
    //实在不会,那肯定是有什么东西欠缺了,然后学一波,实在不行看别人的代码- -如果想变强就这么做
    
    void debug()
    {
        printf("
    ");
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                printf("%d",dp[i][j]);
            }
            printf("
    ");
        }
    }
    
    int main()
    {
        while(~scanf("%d",&n)&&n!=-1)
        {
            memset(dp,0,sizeof(dp));
            dp[1][1]=1;
            for(int i=1;i<=n;i++)
            {
                scanf("%s",a[i]+1);
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    long long mm=-1;
                    if((a[i][j]-'0')==0&&i!=n&&j!=n)
                        continue;
    
                    for(int k=1;k<j;k++)
                    {
                        int t=a[i][k]-'0';
                        int y=j-k;
                        if(t==y)
                        {
                            if(i==1&&k==1||dp[i][k])
                                dp[i][j]+=dp[i][k];
                        }
                    }
    
                    for(int k=1;k<i;k++)
                    {
                        int t=a[k][j]-'0';
                        int y=i-k;
                        if(t==y)
                        {
                            if(k==1&&j==1||dp[k][j])
                                dp[i][j]+=dp[k][j];
                        }
                    }
                }
            }
            debug();
            printf("%lld
    ",dp[n][n]);
        }
        return 0;
    }
  • 相关阅读:
    序列化与反序列化
    进程与线程
    winform基础
    MD5加密
    Docker安装Nextcloud+collabora office+ocdownloader
    Docker安装MariaDB
    Docker 安装 Nginx
    Docker命令大全
    Docker之镜像操作
    Linux入门-Docker安装
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934578.html
Copyright © 2020-2023  润新知