首页 > 其他 > 详细

NOIP普及组过河卒题解

时间:2020-04-19 23:13:18      阅读:105      评论:0      收藏:0      [点我收藏+]

题解又双叒叕来了!

这是一道简单的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\n",f[bx][by]);
    return 0;
}//完美收工

  最后,恳请大家一定要:

技术分享图片

 

NOIP普及组过河卒题解

原文:https://www.cnblogs.com/20070618hyz/p/12734825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!