小明的骰子(递推)

小明的骰子

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描写叙述

众所周知,小明很喜欢玩骰子。一天,小芳问小明一个问题。一次性抛n个骰子,一共能抛出几种结果?

小明不想让小芳认为自己回答不上来,所以小明来求助于你。你一定要帮帮小明。

输入

首先输入一个整数T,代表有T组数据。

接下来的T行,每行输入一个整数n,代表有n个骰子。(0<n<=1000)

注:1,每一个骰子有6个面。

2,每一个骰子都是同样的。所以(1,1,2)和(1,2,1)是同样的结果。

输出

输出一次性抛n个骰子,一共能抛出几种结果。由于结果有可能非常大,所以输出的结果要对1000007取余。

演示样例输入

2
1
2

演示样例输出

6
21

提示

假设仅仅抛一次骰子,骰子有6个面。所以一共能够抛出6种可能性。

假设一次性抛2个骰子,可能的结果有下面几种:

(1,1)(1,2)(1,3)(1,4)(1,5)(1,6)  6

(2,2)(2,3)(2,4)(2,5)(2,6)                 5

(3,3)(3,4)(3,5)(3,6)                               4

(4,4)(4,5)(4,6)                                              3

(5,5)(5,6)                                                            2

(6,6)                                                                           1

即,一共21种                                                                 合计21

校赛的时候的一道题,那个时候我还不知道递推为何物。。

将6种骰子开头的总类打表 即f[1][j]--f[6][j] (j代表骰子的数目)f[7][j]为f[1][j]--f[6][j]的和 即骰子数为 j 时的答案

规律就是以1开头骰子即f[1][j] 其值等于f[7][j-1]  而f[i][j]=f[i-1][j]-f[i-1][j-1]  (i>=2)  规律在纸上找的,这里我也没办法打出来了。。找起来的话不算难 写出前4种情况差点儿相同就能看出来了

#include <iostream> //小明的骰子--递推
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
long long f[10][1010];
const int MOD=1000007;
int main()
{
	int i,j,t,n;
	for(i=1;i<=6;i++)
		f[i][1]=1;
	f[7][1]=6;
	for(j=2;j<=1010;j++)
	{
		f[1][j]=f[7][j-1];
		f[7][j]=f[1][j];
		for(i=2;i<=6;i++)
		{
			f[i][j]=f[i-1][j]-f[i-1][j-1];
			f[7][j]+=f[i][j];
		}
	}
	cin>>t;
	while(t--)
	{
		cin>>n;
		cout<<f[7][n]%MOD<<endl;
	}
	return 0;
}
时间: 2025-01-05 02:28:37

小明的骰子(递推)的相关文章

小明的骰子--递推练习

小明的骰子 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 众所周知,小明非常喜欢玩骰子.一天,小芳问小明一个问题.一次性抛n个骰子,一共能抛出几种结果? 小明不想让小芳觉得自己回答不上来,所以小明来求助于你.你一定要帮帮小明. 输入 首先输入一个整数T,代表有T组数据. 接下来的T行,每行输入一个整数n,代表有n个骰子.(0<n<=1000) 注:1,每个骰子有6个面. 2,每个骰子都是相同的.所以(1,1,2)和(1,2

第6届—校赛 小明的骰子

小明的骰子 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 众所周知,小明非常喜欢玩骰子.一天,小芳问小明一个问题.一次性抛n个骰子,一共能抛出几种结果? 小明不想让小芳觉得自己回答不上来,所以小明来求助于你.你一定要帮帮小明. 输入 首先输入一个整数T,代表有T组数据. 接下来的T行,每行输入一个整数n,代表有n个骰子.(0<n<=1000) 注:1,每个骰子有6个面. 2,每个骰子都是相同的.所以(1,1,2)和(1,2

18025 小明的密码

18025 小明的密码 时间限制:4000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description 小明的密码由N(1<=N<=12)个数字构成,每个数字都可以是0至9中任意一个数字,但小明的密码还有 一个特点就是密码中连续的M(1<=M<=4)个数字的和是质数,现给定M和N,求满足条件的密码共有多少 个? 输入格式 第1行是T,case数量,此后T行,每行两个数,N和M 输出格式 每个case输出一个满足条件的密

scauoj 18025 小明的密码 数位DP

18025 小明的密码 时间限制:4000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Description 小明的密码由N(1<=N<=12)个数字构成,每个数字都可以是0至9中任意一个数字,但小明的密码还有 一个特点就是密码中连续的M(1<=M<=4)个数字的和是质数,现给定M和N,求满足条件的密码共有多少 个? 输入格式 第1行是T,case数量,此后T行,每行两个数,N和M 输出格式 每个case输出一个满足条件的密

11.爱吃皮蛋的小明(斐波那契数列)

爱吃皮蛋的小明(斐波那契数列) 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 小明特别爱吃蛋,特别是皮蛋.他一次可以吃一个蛋或者两个蛋(整个吞下去),而且他喜欢吃得有花样,他想知道对于一定蛋的数量,有几种不同的吃法. 输入描述 Input Description 一行一个整数N,表示皮蛋的数量 输出描述 Output Description 一行一个整数sum,表示吃法总数 样例输入 Sample Input 3 样例

hdu--1028--dp||递推||母函数

这题开始的时候犯了和做--调皮的小明的时候 一样的错误 去dfs了 果断TLE啊 然后想起来 就dp去做... 还有一些别的做法 有人用递推 或者 母函数做的 其实递推的话 还是和dp有点像的 还有一种 记忆化搜索的方法 太流弊了 我把它都贴出来好了 1 /* 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 int n , cnt; 7 void dfs( int pos , int sum

SOJ【栈】射击游戏(递推思想)

Description 小明很喜欢玩射击游戏.这周末,他完成了数据结构作业之后,又来到了射击娱乐场.他从老板那租了一把步枪和装有N发子弹的弹夹.注意:所有的子弹都从枪口上膛.在射击的过程中,小明每次都有两种选择:从弹夹中取出一颗子弹上膛,或者打一发子弹出去.恰巧,这周二,小明刚上了数据结构中<栈>那一章,于是,他想通过“栈”的数据结构来算出究竟有多少种不同的子弹打出顺序.假设N颗子弹的编号为1,2,…,N.子弹从弹夹中取出的顺序也是从1到N.你可以帮小明解决这个问题吗? Input 可能有多个

nyoj-0469-擅长排列的小明 II(找规律)

nyoj-0469-擅长排列的小明 II 思路:递推分析:为了简便起见,我们用Ai代表第i个数字 , 由于A1一直是1,所以A2只能是2或3.假设dp[n]表示1->n这个序列的方案数           1.当A2=2时,从A2到An的排列(2~n)相当于从A1到An-1的排列(1~n-1)(把每个数字都加1),一共有dp[n-1]种情况.           2.当A2=3时,A3可能为2,4,5.               1.当A3=2时,A4一定等于4,此时从A4到An的排列(4~n

递推(二):递推法的应用

下面通过一些典型实例及其扩展来讨论递推法的应用. [例2]骨牌铺方格 在2×n的一个长方形方格中,用一种2×1的骨牌铺满方格.输入n(n<=40),输出铺放方案的总数. 例如n=3时,为2×3方格,骨牌的铺放方案有三种,如下图1所示. 图1  2×3方格的骨牌铺放方案 (1)编程思路. 设f[i]为铺满2*n方格的方案数,则有    f[i]=f[i-1]+f[i-2]. 其中,f[i-1]为铺满2*(n-1)方格的方案数(既然前面的2*(n-1)的方格已经铺满,那么最后一个只能是竖着放).f[