楼梯

爬楼梯

一曲冷凌霜 提交于 2020-03-21 09:17:11
746. Min Cost Climbing Stairs 数组的每个索引做为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i] (索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 示例 1: 输入: cost = [10, 15, 20] 输出: 15 解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。思路:位于位置i,可以花费cost[i]爬一阶楼梯,或者爬二阶楼梯。当只有一阶楼梯时,本身就处于终点,不需要再花费力气了。 1 class Solution(object): 2 def minCostClimbingStairs(self, cost): 3 """ 4 :type cost: List[int] 5 :rtype: int 6 """ 7 8 n=len(cost) 9 if(n==1): return cost[0] 10 11 dp=[0 for j in range(n+1)] 12 13 dp[1]=0 14 dp[2]=min(dp[1]+cost[1],cost[0]) 15 for i in range(3,n+1): 16 dp[i]=min

hdu1180诡异的楼梯(bfs)

寵の児 提交于 2020-02-08 13:18:10
最近做题缺乏手感,找一道bfs练一练 题目链接 这种题目属于最简单的那种bfs,需要注意的是遇到楼梯时的处理,如果不满足通过楼梯的条件,则需要退回到原位置等待,此时原位置也需要入队。 #include <bits/stdc++.h> using namespace std; char maps[22][22]; bool st[22][22]; int n,m; int dir[][2] = {{-1,0},{1,0},{0,-1},{0,1}}; struct node{ int x,y,step; }; node s,t; bool check(node a) { int x=a.x; int y=a.y; if(x<0||x>=n||y<0||y>=m||st[x][y]||maps[x][y]=='*') return false; return true; } int bfs() { memset(st,false,sizeof st); queue<node> q; st[s.x][s.y]=true; q.push(s); while(q.size()) { node a=q.front(); q.pop(); if(a.x==t.x&&a.y==t.y) { return a.step; } node nxt; for(int i=0;i<4;i++) { nxt

脑残小白上楼梯(递归)

让人想犯罪 __ 提交于 2020-01-30 02:35:00
共有n阶台阶,小白一次可以上1-2-3阶 共有多少种上法 int f(int n);int main() { while(true) { int n; scanf("%d",&n); int s = f(n); printf("%d\n",s); } return 0;}int f(int n) { if(n==0) return 1; if(n==1) return 1; if(n==2) return 2; return f(n-1)+f(n-2)+f(n-3);}`` 点赞 收藏 分享 文章举报 小沣不秃头 发布了6 篇原创文章 · 获赞 0 · 访问量 42 私信 关注 来源: CSDN 作者: 小沣不秃头 链接: https://blog.csdn.net/weixin_45619037/article/details/104109512

The 2019 ICPC Asia-East Continent Final(M、E、H)

谁都会走 提交于 2020-01-23 16:18:17
The 2019 ICPC Asia-East Continent Final 大部分学习于: The 2019 ICPC Asia-East Continent Final(部分题解) 欠了一屁股的题目要补,倒序开始做吧! 大概有10套题目 & 7套网络赛题目…(署训就…) A 在瓜大签了个A,之后坐着数了4个小时气球。 补题 M 做的时候为什么没有想到暴力…? 从1到n获取一些基底,满足基底不是任何其他数字的幂次;以这些基底和其若干次幂组成一串元素,枚举这一串数字的选取情况,不断更新最大值即可。 容易知道一串元素至多有20个,所以可以用二进制数表示这20个元素的选取情况。在每一种选取情况中嵌套循环来搜索那些需要减去 b [ i ] b[i] b [ i ] 的位置并打上标记,读题有一个地方不是很对:只要有一对 ( i , j ) (i, j) ( i , j ) 满足 i k = j i ^ k = j i k = j 就要减去一次 b [ j ] b[j] b [ j ] ,最开始的理解是存在上述元素对 ( i , j ) (i, j) ( i , j ) 就仅减去一次 b [ j ] b[j] b [ j ] ,这也是后来补题的时候卡了很久的地方。 AC代码 E 给出一个有向简单图,顶点1到顶点n之间有若干条长度相同、互不相交的路径;每条路径具有容量

嫁一个肯背你上楼梯的男人

放肆的年华 提交于 2020-01-02 15:36:42
嫁一个肯背你上楼梯的男人 她是城市的白领,他是城市的扛包工人。   高中毕业后,两个人划着完全不同的青春轨迹。可是,他们依然保持着恋人的关系。仅仅是保持着。   白天,她在公司里喝正宗的雀巢咖啡;下班后,她吃他买来的廉价冰棍;中午,她品味着公司里精致的饭菜;晚上,他带她去脏兮兮的饭馆吃并不正宗的兰州拉面。   她认为,自己的生活太不协调。这样的恋情,从开始的那一天,便仿佛注定了某一种结局。     他每天去接她,然后送她到她居住的白领公寓的电梯口,道一声晚安,匆匆离去。   那天她突然想撒娇,她说,“背我上去吧。”他看了看电梯,电梯运转良好,然后他回头,说“好”。他没问理由。   他背着她,从一楼开始,慢慢向上爬。   爬到一半他累了,他说:“休息一下好不好?”她突然来了兴致,娇嗔着不答应。   他就真的没有休息,一直爬到她的寓所所在的13层。   她问他累不累,他说:“累,比扛包累。”她知道他说的是真的,她有了一丝感动。   但他们还是分手了。因为有时候,仅有感动,并不能够将爱情维持。   城市里并不缺少一个扛包工人,所以他回到乡下。他偶尔会给她打来电话,告诉她:他现在种着大棚,挣了一些钱。她听着,淡淡地。那时她已经有了新的男友,门当户对的那种。   然后某一天,他又一次打来电话,说他攒够了五千元钱,这些钱,可以在乡下娶老婆了。她发现,突然间,自己的眼角,竟然有些湿润。  

2019-12-22-递归-上楼梯

此生再无相见时 提交于 2019-12-23 12:01:47
2019-12-22 //************************************************************************************* //* 程序名: 下楼问题 * //* 编制时间 2017/10/18 * //* 编制人 小小书童 * // 问题描述: 从楼上到楼下一共 h 个台阶 ,每一步有三种走法, 1个 台阶 2 个台阶 , * // 3个台阶 ,求总共有多少中走法 * //************************************************************************************* #include <iostream> using namespace std; int run[1000] ; //记录走过的过程 int ways = 0 ; //方案数 void Try(int h , int id) // h 表示楼梯的阶数 , id 记录数组的 标号 { int i ; for( i=3 ; i> 0 ;i--){ // 3种 不同的选择 if(h<i){ continue ; //如果楼梯数 < 0 , 方案 不成立 , 故什么也不做 } else { run[id] = i ; if(h==i){ ways++ ; cout<<"方案数

楼梯问题

空扰寡人 提交于 2019-12-03 11:57:06
问题 B: 楼梯问题 时间限制: 1 Sec 内存限制: 128 MB 题目描述 魔法学院建造的太空梯类似一个用数目为n的砖块堆起来的楼梯。楼梯的每层严格由不同个数的砖块按照由小到大的次序排列。在排列中,不允许各层有相同的高度。每个楼梯至少有两层,每层至少有一块。 图给出N=11和N=5的时的摆法: 你的任务是写一个程序,输入砖块数N,打印出共有多少种不同的摆法。 输入 砖块数N,3≤N≤500。 输出 一个整数,表示共有多少种不同的摆法。 样例输入 Copy 5 样例输出 Copy 2    说是DP也不是特别准确,感觉像是递推,练练思维挺好。    设dp[i][j]表示用了i块砖头,最后一列砖头高度为j时的最大方案数,因为列数从前往后,每一列的高度是递增的,所以可以从dp[i-j][k]推得。(最后一列用了j个堆了j的高度,则前面就有i-j个块)    1<=k<j,k有可能会大于i-j不过没关系,这些值为零,不影响结果。上代码。     #include<bits/stdc++.h> #define maxn 505 using namespace std; long long dp[maxn][maxn]; long long n,ans; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ dp[i][i]=1; for

爬楼梯

匿名 (未验证) 提交于 2019-12-03 00:08:02
在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。 请问计算出你可以采用多少种不同的方式爬完这个楼梯。 输入描述: 一个正整数n(n<=100),表示这个楼梯一共有多少阶 输出描述: 一个正整数,表示有多少种不同的方式爬完这个楼梯 #include<iostream> #include<vector> #include<algorithm> using namespace std; string add(string&a,string&b){ string res; int tmp=0; int i,j; for(i=a.length()-1,j=b.length()-1;i>=0&&j>=0;i--,j--){ res.push_back(char((a[i]-'0'+b[j]-'0'+tmp)%10+'0')); tmp=(a[i]-'0'+b[j]-'0'+tmp)/10; } if(j!=-1){ for(;j>=0;j--){ res.push_back(char((b[j]-'0'+tmp)%10+'0')); tmp=(b[j]-'0'+tmp)/10; } } if(i!=-1){ for(;i>=0;i--){ res.push_back(char((a[i]-'0'+tmp)%10+'0')); tmp=(a[i]-'0'+tmp)/10; } } if(tmp

爬楼梯 (大数加法)

匿名 (未验证) 提交于 2019-12-02 23:57:01
时间限制:1秒 空间限制:65536K 在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。 请问计算出你可以采用多少种不同的方式爬完这个楼梯。 输入描述: 一个正整数n(n<=100),表示这个楼梯一共有多少阶 输出描述: 一个正整数,表示有多少种不同的方式爬完这个楼梯 输入例子1: 5 输出例子1: 8 思路:大数相加。long long也溢出。 1 #include <iostream> 2 #include <vector> 3 #include <string> 4 using namespace std; 5 string add(string s1, string s2) { 6 int len1 = s1.length(), len2 = s2.length(); 7 int maxlen = max(len1, len2) + 1; 8 string res(maxlen, '0'); 9 int flag = 0; 10 int i = len1 - 1, j = len2 - 1, k = maxlen - 1; 11 for (; i >= 0 && j >= 0; i--, j--) { 12 int temp = (s1[i] - '0') + (s2[j] - '0') + flag; 13 flag = temp / 10; 14 res[k--]=

【HDU 5068】Harry And Math Teacher

匿名 (未验证) 提交于 2019-12-02 23:48:02
题意: 有 \(n\) 层楼,每层楼有两个楼梯(编号为 \(0\) 和 \(1\) ),初始的时候第 \(i\) 层和第 \(i +1\) 层的楼梯两两可达。 有若干次操作: 将第 \(i\) 层的第 \(x\) 号楼梯和第 \(i + 1\) 层的第 \(y\) 号楼梯的连通性反转 查询从第 \(x\) 层到第 \(y\) 层的方案数。 思路: 用 \(a_{x, y}\) 表示从第 \(i\) 层的 \(x\) 号楼梯到第 \(i + 1\) 层的 \(y\) 号楼梯的方案数。 那么显然,初始的时候所有的 \(a_{x, y} = 1\) 。 用 \(f_{i, x}\) 表示到达第 \(i\) 层 \(x\) 号楼梯的方案数。 有转移矩阵: \[ \begin{eqnarray*} \left[ \begin{array} {cccc} f_{i, 0}\quad f_{i, 1} \end{array} \right] \left[ \begin{array}{cccc} a_{0, 0} \quad a_{1, 0} \\ a_{0, 1} \quad a_{1, 1} \end{array} \right] = \left[ \begin{array}{cccc} f_{i + 1, 0} \quad f_{i + 1, 1} \end{array} \right]