码迷,mamicode.com
首页 > 其他好文 > 详细

九度oj 题目1552:座位问题

时间:2016-09-18 23:56:13      阅读:397      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻。现在活动的组织者想知道,共有多少种可选的座位方案。


例如当n为4时,共有
女女女女, 女女女男, 男女女女, 女女男男, 男女女男, 男男女女, 男男男男
7种。

 

输入:

输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000)。

 

输出:

对于每组测试用例,输出一个数代表可选的方案数,为防止答案过大,答案对1000000007取模。

 

样例输入:
1
2
4
样例输出:
1
2
7

dp[i][0]表示有i个座位并且最后一个人是女生的情况数
dp[i][0]表示有i个座位并且最后一个人是男生的情况数

代码如下:
 1 #include <cstdio>
 2 #define M 1000000007
 3 int dp[1010][2];
 4 
 5 int main(int argc, char const *argv[])
 6 {
 7     dp[1][0] = 0;
 8     dp[1][1] = 1;
 9     dp[2][0] = 1;
10     dp[2][1] = 1;
11     for(int i = 3; i <= 1000; i++) {
12         dp[i][0] = (dp[i-1][0] + dp[i-2][1])%M;
13         dp[i][1] = (dp[i-1][0] + dp[i-1][1])%M;
14     }    
15     int n;
16     while(scanf("%d",&n) != EOF) {
17         printf("%d\n",(dp[n][0] + dp[n][1])%M);
18     }
19     return 0;
20 }

第一次提交错误,代码如下

 1 #include <cstdio>
 2 #define M 1000000007
 3 int dp[1010][2];
 4  
 5 int main(int argc, char const *argv[])
 6 {
 7     dp[1][0] = 0;
 8     dp[1][1] = 1;
 9     dp[2][0] = 1;
10     dp[2][1] = 1;
11     for(int i = 3; i <= 1000; i++) {
12         dp[i][0] = (dp[i-1][0] + dp[i-2][1])%M;
13         dp[i][1] = (dp[i-1][0] + dp[i-1][1])%M;
14     }   
15     int n;
16     while(scanf("%d",&n) != EOF) {
17         printf("%d\n",dp[n][0] + dp[n][1]);
18     }
19     return 0;
20 }

原因在第17行没有对和%M



九度oj 题目1552:座位问题

标签:

原文地址:http://www.cnblogs.com/jasonJie/p/5883347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!