您的位置:首页 > 其它

DP 动态规划 Problem K 1011 蜜蜂爬蜂房

2016-05-01 21:29 411 查看


Problem K ID:1011

简单题意:蜜蜂只能爬向右侧相邻的蜂房,计算蜜蜂从蜂房a爬到蜂房b的可能路线数。



解题思路形成过程:t=b-a为相隔的蜂房数。

用一个数组a来储存不同t值对应的可能路线数,a[1]=1,a[2]=2;

当n>=3时,状态转移方程为:a[i]=a[i-1]+a[i-2]。


因为0<a<b<50,进行预处理,将t=1至t=50的结果储存到数组中。


对应不同的t值,直接输出对应的数组值(a[i])。



感想:看似情况变复杂了,实际上只比曾经遇到的问题(如上楼梯问题)多一步运算而已。

当觉得情况有些陌生时,可以想一想是否和曾经遇到的问题相类似,能不能转换成其他的问题。

注意数据类型。

代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
__int64 s[51];
void dp()
{
s[1]=1;s[2]=2;
for(int i=3;i<=50;++i)
s[i]=s[i-2]+s[i-1];
}
int main()
{
//freopen("1.txt","r",stdin);
int n;
scanf("%d",&n);
dp();
while(n--)
{
int a,b,t;
scanf("%d%d",&a,&b);
t=b-a;
printf("%I64d\n",s[t]);
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: