zoukankan      html  css  js  c++  java
  • 九度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
    ",(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
    ",dp[n][0] + dp[n][1]);
    18     }
    19     return 0;
    20 }

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



  • 相关阅读:
    kill命令
    linux grep命令
    ps命令详解
    Linux chmod命令详解
    Linux netstat命令详解
    多线程同步机制的几种方法
    C++_运算符重载 总结
    malloc/free与new/delete的区别
    python发送邮件
    linux之nfs
  • 原文地址:https://www.cnblogs.com/jasonJie/p/5883347.html
Copyright © 2011-2022 走看看