递推专题(一)HDU2044——2050
来源:互联网 发布:graph cut算法原理 编辑:程序博客网 时间:2024/06/05 16:12
在Hdu上是下面几题:
Hdu 2041 超级楼梯
下面是解题报告(因为有的题有点水,和贴发)
Hdu 2044 一只小蜜蜂...
分析:数一下前几种可能的走法,不难发现这是个斐波那契数。但是题目给定任意两个数a和b(a<b),计算a到b的走法。因为是从a到b的走法,所以从1到a的走法我们不用讨论,同理从1到b的走法我们也不用讨论。这样,就可以将a看做1,将b看做(b-a+1),转化为求从1到(b-a+1)的走法。
o(╯□╰)o:只知道是斐波那契数,但是布吉岛斐波那契数数的增长很快,很容易爆int。
下面是代码:
- /*Hdu 2044 一只小蜜蜂...
- 递推 斐波那契数
- 数组开long long,斐波那契数增长很快
- */
- #include<iostream>
- using namespace std;
- const int maxn = 60;
- long long f[maxn];
- int t,a,b;
- int main()
- {
- f[1] = 1;
- f[2] = 1;
- for(int i = 3; i <= maxn; i++) f[i] = f[i-1] + f[i-2];
- cin>>t;
- while(t--)
- {
- cin>>a>>b;
- cout<<f[b-a+1]<<endl;
- }
- return 0;
- }
Hdu 2045 不容易系列之(3)—— LELE的RPG难题
分析:
下面是代码:
- #include<iostream>
- using namespace std;
- const int maxn = 55;
- long long F[maxn];
- int n;
- int main()
- {
- F[1] = 3;
- F[2] = 6;
- F[3] = 6;
- for(int i = 4; i <= maxn; i++) F[i] = F[i-1] + 2 * F[i-2];
- while(cin>>n) cout<<F[n]<<endl;
- return 0;
- }
Hdu 2046 骨牌铺方路
分析:前一排只有一种方法,所以只用讨论F[n-1];前二排也只有一种方法,那么讨论F[n-2]。所以递推式:F[n] = F[n-1] + F[n-2]。这也是斐波那契数。
下面是代码:
- #include<iostream>
- using namespace std;
- const int maxn = 55;
- long long f[maxn];
- int n;
- int main()
- {
- f[0] = 1;
- f[1] = 1;
- for(int i = 2; i <= maxn; i++) f[i] = f[i-1] + f[i-2];
- while(cin>>n) cout<<f[n]<<endl;
- return 0;
- }
Hdu 2047 阿牛的EOF牛肉串
分析:设F[n]可以由两个部分得到,第(n-1)个为O,第(n-1)个为O。
F[n] = 2 * (为O) + 3 *(不为O)
下面是代码:
- #include<iostream>
- using namespace std;
- const int maxn = 45;
- long long A[maxn];
- long long B[maxn];
- int n;
- int main()
- {
- A[1] = 1;
- B[1] = 2;
- for(int i = 2; i <= maxn; i++)
- {
- A[i] = B[i-1];
- B[i] = 2 * (A[i-1] +B[i-1]);
- }
- while(cin>>n) cout<<A[n]+B[n]<<endl;
- return 0;
- }
Hdu 2048 神,上帝和老天爷
分析:全错位排列。当n小于8时,用递推求解;当n大于8时,基本上概率不变。不过犯二了,记错变形后的递推公式了,囧!
下面是代码“:
- /*Hdu 2048 神,上帝和老天爷
- 全错位排列
- */
- #include<cstdio>
- #include<cmath>
- using namespace std;
- const int maxn = 50;
- double D[maxn];
- int n;
- int main()
- {
- D[1] = 0;
- D[2] = 1;
- int t;
- scanf("%d",&t);
- while(t--)
- {
- double f = 1;
- scanf("%d",&n);
- if(n <= 10)
- {
- for(int i = 2; i <= n; i++)
- {
- f = f * i;
- double flag;
- if(i%2 == 0) flag = +1;
- else flag = -1;
- D[i] = i * D[i-1] + flag;
- }
- int ans = floor((D[n]/f+0.00005)*10000);
- printf("%.2lf%\n",(double)ans/100);
- }
- else
- printf("36.79%10\n");
- }
- return 0;
- }
Hdu 2049 不容易系列之(4)——考新郎
分析:这到题和上一题相似,都是错位排列。只不过上一题是全错位排列,只一题是部分错位排列。但是原理没有什么不一样的。
下面是代码:
- #include<iostream>
- using namespace std;
- const int maxn = 25;
- long long F[maxn],C[maxn];
- int t,n,m;
- int main()
- {
- F[1] = 0;
- F[2] = 1;
- C[0] = 1;
- for(int i = 3; i <= maxn; i++) F[i] = (i-1) * (F[i-1] + F[i-2]);
- cin>>t;
- while(t--)
- {
- cin>>n>>m;
- for(int i = 1; i <= n; i++) C[i] = C[i-1]*(n-i+1)/i;
- cout<<C[m]*F[m]<<endl;
- }
- return 0;
- }
Hdu 2050 折线分割平面
分析:首先搞清楚直线分割平面问题,然后再根据直线问题解决折线问题。
下面是代码:
- #include<iostream>
- using namespace std;
- int n,t;
- int main()
- {
- cin>>t;
- while(t--)
- {
- cin>>n;
- cout<<1 + (2*n)*(2*n+1)/2 - 2*n<<endl;
- }
- return 0;
- }
Hdu 2041 超级楼梯
很简单的递推题,直接代码
- #include<iostream>
- using namespace std;
- const int maxn = 50;
- int d[maxn];
- int t,n;
- void print()
- {
- d[1] = 1;
- d[2] = 1;
- for(int i = 3; i < maxn; i++)
- {
- d[i] = d[i-1] + d[i-2];
- }
- }
- int main()
- {
- cin>>t;
- print();
- while(t--)
- {
- cin>>n;
- cout<<d[n]<<endl;
- }
- return 0;
- }
好了,前前后后花了不少时间才刷完这几道递推入门题。都是很基础的一些问题。
- 递推专题(一)HDU2044——2050
- HDU2044--一只小蜜蜂(递推)
- 一只小蜜蜂 HDU2044 递推
- HDU2044 一只小蜜蜂... 动态规划入门-递推
- hdu2044——一只小蜜蜂...
- 一只小蜜蜂...(HDU2044)
- 专题——基础递推
- 09-02 HDU_Steps3.1 递推入门 HDU2041 HDU2044 HDU2045 HDU 2050 HDU2501 HDU2018 HDU1297 HDU2604
- hdu_2044_一只小蜜蜂...(递推专题)
- 动态规划之简单递推(HDU2041,HDU2044,HDU2045,HDU2046,HDU2047)
- 递推求解的基本方法hdu2044-2047
- hdu2044 一只小蜜蜂...(C语言)
- HDU-#2044-2050 递推求解专题
- 递推专题
- HDU 递推专题
- hdu2044 一只小蜜蜂
- hdu2044 一只小蜜蜂
- hdu2044 一只小蜜蜂
- vector的reserve和resize
- JAVA8 Function、Consumer、Predicate、Supplier接口
- 关于java.lang.OutOfMemoryError: Java heap space的解决方案
- 129. Sum Root to Leaf Numbers
- 关于Java Web 使用JavaMail创建邮件和发送邮件
- 递推专题(一)HDU2044——2050
- PAT 乙级 1008
- 2.SpringBoot-环境配置
- 看图理解单链表的反转
- 【原创】Spring-boot快速入门(二)JPA数据源--转载请注明出处
- JQuery之简单下拉框
- Jmeter性能测试 入门
- 运输层—TCP的拥塞控制
- VLOOKUP使用技巧之按指定次数重复数据