JD 1552:座位问题
2014-03-11 17:35
369 查看
题目描述:
计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻。现在活动的组织者想知道,共有多少种可选的座位方案。
例如当n为4时,共有
女女女女, 女女女男, 男女女女, 女女男男, 男女女男, 男男女女, 男男男男
7种。
输入:
输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000)。
输出:
对于每组测试用例,输出一个数代表可选的方案数,为防止答案过大,答案对1000000007取模。
样例输入:
样例输出:
计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻。现在活动的组织者想知道,共有多少种可选的座位方案。
例如当n为4时,共有
女女女女, 女女女男, 男女女女, 女女男男, 男女女男, 男男女女, 男男男男
7种。
输入:
输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000)。
输出:
对于每组测试用例,输出一个数代表可选的方案数,为防止答案过大,答案对1000000007取模。
样例输入:
1 2 4
样例输出:
1 2 7
学的某位高人的代码。。
#define woman 0 #define man 1 #define Mod 1000000007 #define Max_N 1001 using namespace std; int dp[Max_N][2]; void DP() { dp[1][woman] = 1; dp[1][man] = 1; dp[2][woman] = 1; dp[2][man] = 1; for(int i = 3;i < Max_N;i++) { dp[i][woman] = (dp[i - 1][woman] + dp[i - 1][man])%Mod; dp[i][man] = (dp[i - 2][woman] + dp[i - 1][man])%Mod; } } int solve(int n) { DP(); if(n == 1) return 1; return ((dp [woman] + dp [man])%Mod + Mod)%Mod; } int main() { int n; while(cin >> n) { cout << solve(n) << endl; } return 0; }
相关文章推荐
- spring:Circular placeholder reference 'XXX' in property definitions
- 基于ViewGroup自定义自动换行的布局的实现(用于备忘)
- 在linux上进行php开发扩展
- gdb调试学习
- 给这个阶段画上一个小小的分号
- 嵌入式Linux更改开机图片(小企鹅)
- Ubuntu 12.04下制作JNA For Android
- 对于Ajax在IE上读缓存的问题
- 心情梳理
- 问道博客园
- CentOS上安装WordPress搭建博客平台
- 基于ffmpeg的Android播放器开源代码
- Mongodb开启与关闭
- Linux内核跟踪之syscall tracer
- ClassLoader理解
- 游戏AI模块设计--行为树
- 模板基于源码的替换而不是基于obj的复用
- oracle菜鸟到大神之路
- IE8中给HTML标签负值报错问题
- Flex使用问题汇总