hdu 2041 超级楼梯(简单dp 0/1背包变形)
来源:互联网 发布:四知的学法指导 编辑:程序博客网 时间:2024/06/05 16:06
超级楼梯
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 35664 Accepted Submission(s): 18313
Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
Sample Input
223
Sample Output
12
Author
lcy
题目分析:每次计算出出走n次以内到达m处的次数,转移方程为dp[m] = max ( dp[m-1]+dp[m-2] , dp[m] ) m >= 2 , dp = max ( dp[m-1] , dp[m] ) m >= 1
初始状态dp[1] = 1,因为是从1开始走,利用0/1背包的转移方式 即可
初始状态dp[1] = 1,因为是从1开始走,利用0/1背包的转移方式 即可
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define MAX 47using namespace std;int t,n,dp[MAX];int main ( ){ scanf ( "%d" , &t ); while ( t-- ) { scanf ( "%d" , &n ); memset ( dp , 0 , sizeof ( dp ) ); dp[1] = 1; for ( int i = 1 ; i <= n ; i++ ) for ( int j = n ; j >= 2 ; j-- ) if ( j-2 >= 0 ) dp[j] = max ( dp[j-1]+dp[j-2] , dp[j] ); else if ( j-1 >= 0 ) dp[j] = max ( dp[j-1] , dp[j] ); printf ( "%d\n" , dp[n] ); }}
0 0
- hdu 2041 超级楼梯(简单dp 0/1背包变形)
- Hdu 2041 超级楼梯 简单DP
- HDU 2041 超级楼梯 简单DP动态规划 递归
- HDU 2041 超级楼梯(dp)
- HDU 2041 超级楼梯(DP)
- hdu 2041 超级楼梯 动态规划 简单
- hdu 2041 超级楼梯
- HDU 2041 超级楼梯
- Hdu 2041 - 超级楼梯
- HDU 2041 超级楼梯
- HDU 2041 超级楼梯
- hdu 2041 超级楼梯
- HDU 2041 - 超级楼梯
- HDU(2041) (超级楼梯)
- hdu 2041 超级楼梯
- [hdu-2041] 超级楼梯
- hdu 2041 超级楼梯
- HDU 2041 超级楼梯
- STL中的全排列(1)未完待续。
- 一个北邮牛人面试英特尔的经历
- Nginx 跳转fastdfs存储图片地址报错问题分析过程汇总
- CLHLock的C语言实现
- 【HTML】HTML中使用CSS样式的几种方式
- hdu 2041 超级楼梯(简单dp 0/1背包变形)
- 杂谈---技术与管理
- 利用redis实现带优先级的消息队列
- 做人要检点
- Reverse Bits 翻转进制位
- unix环境高级编程源代码在ubuntu下运行
- Number of 1 Bits 数字二进制中1的个数
- 数据结构与算法:Binary search
- 安卓学习笔记之获取Activity的返回值以及Activity的启动模式