hdoj2046 骨牌铺方格 hdoj2047 阿牛的EOF牛肉串
2014-04-10 11:46
375 查看
hdoj2046 骨牌铺方格
设输入为n时,输出为f(n)。当已经有n-1个骨牌时,只能竖着添加一块到达n;当已经有n-2个骨牌时,只能横着添加两块到达n;n-3个骨牌及以下的情况与n-1、n-2重复,所以不用考虑。因此有递推公式:f(n)=f(n-1)+f(n-2),依然是斐波那契数列。
#include<iostream>
using namespace std;
int main()
{
int n;
long long dp[52];
dp[1]=1; dp[2]=2;
for(int i=3; i<=51; i++)
dp[i]=dp[i-1]+dp[i-2];
while( cin>>n )
cout<<dp
<<endl;
}
hdoj2047 阿牛的EOF牛肉串
/****************************** 先来分析有2格的情况: ee oe fe eo fo ef of ff 1.要添新的字母成为3格,只能往后一位添加,不能往前一位添加,否则会重复。 2.设f(2)为2格时候的合法数目,则3*f(2)-fo(2)为3格时候的合法数目f(3),其中fo(2)是2格中以o为结尾的情况数目,因为两个oo不能挨在一起。 3.已知f(2)=8, fo(2)=2,如何求fo(3)?3格情况中结尾的o显然只能在2格情况中结尾不是o的case出现,且只出现1次,故fo(3)=f(2)-fo(2)。 综上,f(3)=3*f(2)-fo(2),fo(3)=f(2)-fo(2)。 ******************************/ #include <iostream> using namespace std; #define MAXN 40 int main() { long long f[MAXN]; long long fo[MAXN]; //填充表格 f[1]=3; fo[1]=1; for (int i=2; i<MAXN; ++i) { f[i]=3*f[i-1]-fo[i-1]; fo[i]=f[i-1]-fo[i-1]; } int n; while (cin>>n) { cout<<f <<endl; } return 0; }
相关文章推荐
- ACM常用算法
- HDU 2569
- SGU 181 X-Sequence(傻逼题)
- [DP]FJSDFZOJ 1143 数字三角形
- [DP]NOIP2002/FJSDFZOJ 1081 过河卒
- 2050——折线分割平面
- 2049——不容易系列之(4)——考新郎
- 2048——神、上帝以及老天爷
- 2047——阿牛的EOF羊肉串
- 2046——骨牌铺方格
- 2045——不容易系列之(3)—— LELE的RPG难题
- 2041——超级楼梯
- 2014——青年歌手大赛_评委会打分
- 2013——蟠桃记
- hdoj_2018 母牛的故事
- HDU 2050 折线分割平面
- HDU 1297 Children’s Queue
- codeforces Round #237(div2) D解题报告
- hdoj2044 一只小蜜蜂 以及如何让水题不水
- hdoj2045 不容易系列之(3)—— LELE的RPG难题