九度oj 题目1552:座位问题

Posted Jason杰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了九度oj 题目1552:座位问题相关的知识,希望对你有一定的参考价值。

题目描述:

计算机学院的男生和女生共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:座位问题的主要内容,如果未能解决你的问题,请参考以下文章

九度OJ-题目1009:二叉搜索树

九度OJ平台练习 —— 题目1009

九度oj 题目1465:最简真分数

九度oj 题目1460:Oil Deposit

九度OJ平台练习 —— 题目1011

九度OJ平台练习 —— 题目1012