SSLOJ 1318.地铁重组

题目描述
问题描述
蒙提在暴风城与铁炉堡之间的地铁站中工作了许多年,除了每天抓一些矿道老鼠外,没有其他的变化。然而最近地铁站终于要扩建了,因为侏儒们攻克了建设长距离穿海隧道的技术难题,矮人们制造的威力也有了很大的增强。于是,联盟决定修建通往诺森德的地铁。拥有常年的地铁站工作经验的蒙提被派往了新的线路上,他的工作是进行地铁重组。

如上图,在左边部分停靠着N节车厢,从右向左标号依次为1、2、……、N。中间有一个停车轨道,这个轨道上最多只能同时停放P节车厢。现在需要将左边轨道上的车厢驶入右边的轨道。每节车厢必须进入一次停车轨道进行检修,然后才能去右边的轨道。侏儒制造的每节车厢都有完整的动力装置,不需要依赖车头的带动。对于一个给定的停车轨道的大小P和左边轨道的车厢的数目N,蒙提想知道,这些车厢到右边轨道以后,有多少种不同的排列顺序。
 
输入
第1行:两个整数N,P。
输出
第1行:一个整数a,为排列顺序数除以4096的余数。
输入样例复制
3 2
输出样例复制
4
说明
数据规模
对于70%的数据

1 <= N <= 500
1 <= P <= 300

对于100%的数据
1 <= N <= 2000
1 <= P <= 2000
 
 
 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 const int N=2010,MOD=4096;
 6 int ans,n,m,f[N][N];
 7 
 8 int main()
 9 {
10     scanf("%d%d",&n,&m);
11     f[0][0]=1;
12     for (int i=1;i<=n;i++)
13         for (int j=min(i,m);j>=0;j--)
14         {
15             if (!j) f[i][j]=f[i][j+1];
16                 else f[i][j]=(f[i][j+1]+f[i-1][j-1])%MOD;
17         }
18     printf("%d",f[n][0]);
19     return 0;
20 } 

 

转载于:https://www.cnblogs.com/zjzjzj/p/10778988.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值