zoukankan      html  css  js  c++  java
  • 洛谷P1057传球游戏-题解

    题目:

    思路:

    一看,计数的

    先考虑一下DP

    计数的转移,难度高的一般要经过思考才能得出来

    但是难度低的(诸如此道)一般已经在题目中说出来了

    重点就在于:

    每个同学可以把球传给自己左右的两个同学中的一个(左右任意)

    这句话上。

    左和右,换成数学表示就是

    i-1,i+1

    由于题目说是一个环,所以特判一下头尾即可

    同时,由于不可能同时传球,所以转移自然是来自于上一维(即上一次)的

    转移方程应运而生:

    f[i][j]=f[i-1][j-1]+f[i-1][j+1];

    特判头尾,

    同时由于题目说从1号开始,所以f[1][1]=1

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    int n,m;
    int DP[35][35];
    int main()
    {
        scanf("%d %d",&n,&m);
        DP[1][1]=1;
        for(int i=2;i<=m;i++)
            for(int j=1;j<=n;j++)
            {
                if(j==1)
                {
                    DP[i][j]=DP[i-1][n]+DP[i-1][2];
                }else if(j==n)
                {
                    DP[i][j]=DP[i-1][n-1]+DP[i-1][1];
                }else
                    DP[i][j]=DP[i-1][j-1]+DP[i-1][j+1];
            }
        printf("%d
    ",DP[m][1]);
        return 0;
    }
  • 相关阅读:
    信号
    test
    keil4打开keil5工程卡死问题
    day01
    SSH问题
    QT_day02
    QT_day01
    C++_day9am
    文件描述符与重定向
    C++_day8pm_多态
  • 原文地址:https://www.cnblogs.com/lujin49/p/13837325.html
Copyright © 2011-2022 走看看