• NOIP普及组过河卒题解


    题解又双叒叕来了!

    这是一道简单的DP题,然而作为蒟蒻的我依旧作了许多遍。QwQ

    思路

    这道题目其实也不是一道难题,只是说放假加上nhoi后都没有写程序了,所以练练手。竟然在一道简单的dp题上卡了那么久,真是内心苦涩啊!劝告各位oier们,不要让编程的手停下来!
    这道题目一看就很像用bfs。所以一开始我也傻傻的用了搜索。 后来看到了提示才如梦初醒吖!对于这种路径条数多,而格子数却不算特别多的题目,用搜索应该会超时,所以就只能选择了DP。这也是一道非常简单的DP题。
    首先!最重要的!不要告诉你们不知道马是怎么走的!
    这道题目首先,很容易就能推出公式。
    f[i][j]=f[i-1][j]+f[i][j-1]
    因为题目也已经说明了,只能往下走和往右走。所以这一个格子的方案数一定是来自于上面的格子和左面的格子。这是显而易见的。
    那么知道了这个公式之后,所有都很好办了。

    本题有个较为坑爹的地方:

    马可以在起点

    所以需要特判,在代码环节会提到

    每天一个小题解,你学废了吗?

    学废了请扣一,没学废请扣眼珠子

    上代码

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define ull unsigned long long
    using namespace std;
    const int fx[]={0,-2,-1,1,2,2,1,-1,-2};
    const int fy[]={0,1,2,2,1,-1,-2,-2,-1};
    int bx,by,mx,my;
    ull ans;
    ull f[30][30];
    bool s[30][30];
    int main(){
        scanf("%d%d%d%d",&bx,&by,&mx,&my);
        ++bx; ++by; ++mx; ++my;
        f[1][1]=1;
        s[mx][my]=1;
        for(int i=1;i<=8;i++)
            s[ mx + fx[i] ][ my + fy[i] ]=1;
        for(int i=1;i<=bx;i++){
            for(int j=1;j<=by;j++){
                if(s[i][j])continue;
                f[i][j]=max( f[i][j] , f[i-1][j] + f[i][j-1] ); 
            }
        }
        printf("%llu
    ",f[bx][by]);
        return 0;
    }//完美收工
    

      最后,恳请大家一定要:

    小蒟蒻ΩωΩ I AK IOI.
  • 相关阅读:
    3.for in循环
    2.break与continue
    1.XHTML框架结构
    lamda表达式在EF中的应用
    View数据呈现相关技术
    ASP.NET MVC 4 技术讲解
    ASP.NET MVC 相关的社群与讨论区
    C# 随机红包算法
    圆圈里带 小写字母,大写字母
    使用SQL语句 检测 MSSQL死锁
  • 原文地址:https://www.cnblogs.com/20070618hyz/p/12734825.html
Copyright © 2020-2023  润新知