• UPCOJ2012 The King’s Walk(dp)


    题意:

    给你一个n*n的地图,起始位置和目标位置

    你每次可以八向走

    问你有多少种最少步数到达的方案

    答案取模

    思路:

    走的步数是确定的,是横坐标、纵坐标只差较大的那个

    然后就是用确定的步数走另一个坐标差这样的距离

    每次可以不走,前进一步,后退一步,不超出地图范围即可

    这尼玛简直看出我这个渣渣的实力。。

    想了一晚上都没想到最后还是问的别人才恍然大悟

    水题,为什么想不到!

    简直菜鸡!

    /* ***********************************************
    Author        :devil
    Created Time  :2016/6/10 20:8:17
    ************************************************ */
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    #include <string>
    #include <cmath>
    #include <stdlib.h>
    using namespace std;
    const int mod=5318008;
    const int N=5010;
    int n,dp[N],dp2[N];
    void solve(int m,int st,int ed)
    {
        memset(dp,0,sizeof(dp));
        dp[st]=1;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                dp2[j]=dp[j];
                if(j>0) dp2[j]+=dp[j-1];
                if(j<n-1) dp2[j]+=dp[j+1];
            }
            for(int j=0;j<n;j++)
                dp[j]=dp2[j]%mod;
        }
        printf("%d
    ",dp[ed]);
    }
    int main()
    {
        //freopen("in.txt","r",stdin);
        int t,x1,y1,x2,y2;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d%d%d%d",&n,&x1,&y1,&x2,&y2);
            if(abs(x1-x2)>abs(y1-y2)) solve(abs(x1-x2),y1-1,y2-1);
            else solve(abs(y1-y2),x1-1,x2-1);
        }
        return 0;
    }
  • 相关阅读:
    /bin,/sbin,/usr/sbin,/usr/bin 目录
    centos开放端口8080
    centos 创建用户组及用户
    oracle内存优化
    ORACLE概要文件
    【刷题】洛谷 P3834 【模板】可持久化线段树 1(主席树)
    【总结】莫比乌斯反演
    【刷题】洛谷 P3768 简单的数学题
    【刷题】BZOJ 4816 [Sdoi2017]数字表格
    【刷题】BZOJ 2693 jzptab
  • 原文地址:https://www.cnblogs.com/d-e-v-i-l/p/5574148.html
Copyright © 2020-2023  润新知