传娃娃
描述 学习空闲之余,小信经常带着同学们做游戏,最近小信发明了一个好玩的新游戏:n 位同学围成一个圈,同学 A 手里拿着一个布娃娃。小信喊游戏开始,每位手里拿着娃娃的同学可以选择将娃娃传给左边或者右边的同学,当小信喊游戏结束时,停止传娃娃。此时手里拿着娃娃的同学即是败者。 玩了几轮之后,小信想到一个问题:有多少种不同的方法,使得从同学 A 开始传娃娃,传了 m 次之后又回到了同学 A 手里。两种方法,如果接娃娃的同学不同,或者接娃娃的顺序不同均视为不同的方法。例如 1->2->3->1和 1->3->2->1 是两种不同的方法。 输入
输入一行,输入两个整数 n,m(3≤n≤30,1≤m≤30),表示一共有 n 位同学一起游戏,一共传 m 次娃娃。 输出
输出一行,输出一个整数,表示一共有多少种不同的传娃娃方法。 输入样例 1 3 3
输出样例 1 2

这道题初一看好像真的想不出该怎么做,但是在同机房大佬的提醒下 应该用DP!

然后就想状态转移方程。。这就炸了。实在想不出该咋玩。于是我试着去画图。(别嫌弃摸鱼酱的图丑)

就以n=6时为例。

初始状态:

我们用dp[m][n]表示第m次传递后第n个小朋友的传娃娃方法数,很明显,我们需要求的即是dp[m][1]的值。找到边界值:dp[0][1]=1;然后可以发现,一个状态转移方程是无法解决这个比较复杂的dp的,需要添加if语句达到效果。

于是我开始讨论有哪些可能。因为这道题是直接用的dp,并没有构建环,所以这是需要特殊考虑的。然后,我们发现,第i次传递后的点k的方案数,只能由第i-1次传递后的点k的左右两人的方案数之和来得到!原理如下图!



但是如上所述,当这个点是1或n时需要特判,所以情况分为三种:

①这个点是1时:dp[i][j]=dp[i-1][j+1]+dp[i-1][n];

②这个点是n时:dp[i][j]=dp[i-1][j-1]+dp[i-1][1];

③这个点是普通点(非1非n时):dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1];

然后双重循环,外层1…->m,内层1…->n,完事输出dp[m][1]即可。

AC代码如下:

#include<bits/stdc++.h>
using namespace std;
int dp[31][31];
int main()
{
int n,m;
cin>>n>>m;
dp[0][1]=1;
for (int i=1;i<=m;i++)
{
for (int j=1;j<=n;j++)
{
if (j==n)
{
dp[i][j]=dp[i-1][j-1]+dp[i-1][1];
}
else if(j==1)
{
dp[i][j]=dp[i-1][j+1]+dp[i-1][n];
}
else
{
dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1];
}
}
}
cout<<dp[m][1]<<endl;
return 0;
}

ov.

【动态规划DP】传娃娃-C++的更多相关文章

  1. 动态规划dp

    一.概念:动态规划dp:是一种分阶段求解决策问题的数学思想. 总结起来就一句话:大事化小,小事化了 二.例子 1.走台阶问题 F(10):10级台阶的走法数量 所以:F(10)=F(9)+F(8) F ...

  2. 算法-动态规划DP小记

    算法-动态规划DP小记 动态规划算法是一种比较灵活的算法,针对具体的问题要具体分析,其宗旨就是要找出要解决问题的状态,然后逆向转化为求解子问题,最终回到已知的初始态,然后再顺序累计各个子问题的解从而得 ...

  3. 【转】动态规划DP

    [数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...

  4. 动态规划DP的优化

    写一写要讲什么免得忘记了.DP的优化. 大概围绕着"是什么","有什么用","怎么用"三个方面讲. 主要是<算法竞赛入门经典>里 ...

  5. hdu 1421:搬寝室(动态规划 DP + 排序)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  6. hdu 2059:龟兔赛跑(动态规划 DP)

    龟兔赛跑 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  7. 动态规划dp专题练习

    貌似开坑还挺好玩的...开一个来玩玩=v=... 正好自己dp不是很熟悉,就开个坑来练练吧...先练个50题?小目标... 好像有点多啊QAQ 既然是开坑,之前写的都不要了! 50/50 1.洛谷P3 ...

  8. Luogu 2627 修建草坪 (动态规划Dp + 单调队列优化)

    题意: 已知一个序列 { a [ i ] } ,求取出从中若干不大于 KK 的区间,求这些区间和的最大值. 细节: 没有细节???感觉没有??? 分析: 听说有两种方法!!! 好吧实际上是等价的只是看 ...

  9. 动态规划DP入门

    百度百科↓ 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bellman ...

随机推荐

  1. BooleanToColorConverter

    public class BooleanToColorConverter : IValueConverter { public object Convert(object value, Type ta ...

  2. oracle data guard备库备份恢复

    客户有套data guard环境,主库在阿里云上,备库在本地机房,现在想定期做备份,但是因为一些原因,备份阿里云上的主库实现会有些问题,所以只能备份本地的备库.目前需求就是测试备库的备份文件是否可以进 ...

  3. SQL Server中 SET 和 SELECT 赋值有什么区别?

    SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT.对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种 ...

  4. .NET Core整合log4net以及全局异常捕获实现2

    Startup代码 public static ILoggerRepository repository { get; set; } public Startup(IConfiguration con ...

  5. SQL Server 将某一列的值拼接成字符串

    名称 海鲜水产 水果蔬菜 海参 肉禽蛋 牛排 腊味 生鲜食品 将以上一列变成: 生鲜食品,海鲜水产,水果蔬菜,海参,牛排,肉禽蛋,腊味 sql for xml path('')

  6. Morris 轻量级 图表

    Morris.js 是基于 jQuery 和 Raphaël 的轻量级矢量图形库,帮助开发人员轻松绘制各种形式的图表.示例: HTML: <div id="myfirstchart&q ...

  7. delphi 实现微信开发(1) (使用kbmmw web server)

    原文地址:delphi 实现微信开发(1)作者:红鱼儿 大体思路: 1.用户向服务号发消息,(这里可以是个菜单项,也可以是一个关键词,如:注册会员.) 2.kbmmw web server收到消息,生 ...

  8. CAP碎碎念

    整个2017年都在搞大数据平台,完全远离了机器学习,甚至都不记得写过类似ETL的job. 从数据到平台,从业务处理到基础服务. Metrics的收集,报警,生成报表.Data pipeline的准确性 ...

  9. ASP.NET MVC3在Visual Studio 2010中的变化

    在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化 1.ASP.NET MVC3必要的运行环境为.NET 4.0 (想在3.5用MVC3,没门!) 2.默认MVC3模板项目 ...

  10. Adobe cs6 全系列软件绿色破解版-一键安装

    下载地址: 链接:https://pan.baidu.com/s/1THssmSS-SnyNc2DW7Wr8cA 提取码:y3tq 软件介绍 作为全球领先的多媒体设计软件供应商,Adobe Syste ...