题目1552:座位问题
时间限制:1 秒内存限制:128 兆特殊判题:否提交:313
解决:95
题目描述:
计算机学院的男生和女生共n个人要坐成一排玩游戏,因为计算机的女生都非常害羞,男生又很主动,所以活动的组织者要求在任何时候,一个女生的左边或者右边至少有一个女生,即每个女生均不会只与男生相邻。现在活动的组织者想知道,共有多少种可选的座位方案。例如当n为4时,共有
女女女女, 女女女男, 男女女女, 女女男男, 男女女男, 男男女女, 男男男男 7种。
输入:
输入包含多组测试用例,每组测试用例仅包含一个整数n(1<=n<=1000)。
输出:
对于每组测试用例,输出一个数代表可选的方案数,为防止答案过大,答案对1000000007取模。
样例输入:
1
2
4
样例输出:
1
2
7
来源:
2014年王道论坛研究生机试练习赛(三)
//jobdu-1552-ac
#include
using namespace std;
#define M 1000000007
int f1[1001],f2[1001],f3[1001];
int n;
int main() {
f1[1] = 1;f1[2] = 1;
f2[2] = 1;
f3[2] = 1;
for(int i=3; i<=1000; i++) {
f1[i] = (f1[i-1] + f3[i-1]) % M;
f2[i] = f1[i-1];
f3[i] = (f2[i-1] + f3[i-1]) % M;
}
while(cin >> n)
cout << (f1[n] + f3[n])%M << endl;
}
/*
分三种情况讨论结尾的情况:
以一个男生结尾,以男-女结尾,以女-女结尾,分别称为第1,2,3种情况
可以看出,第1种情况由第1、3种情况加一个男生得到
第2种情况只能由第1种情况加一个女生得到
第3种情况由第2种和第三种情况加一个女生得到*/