练习1-递推(找数字\街区\铺砖)
1000 Problem A
时间限制 : 40/20 MS(Java/Others) | 内存限制 : 65536/32768 KB(Java/Others)
Submits : 110 | Solved : 24
题目描述
给定一组无序数值,数值的大小在1到百万之间,数值的个数在10-50万个之间。现需要找出其中第5到第10小的整数。
输入要求
一组非0整数,(个数>=10个),0为结束标志。
输出要求
其中第5到第10小的整数。每输出一个整数换行。
输入样例
1
2
3
4
5
6
7
8
9
10
0
输出样例
5
6
7
8
9
10
// An highlighted block
#include<iostream>
using namespace std;
int a[1000];
int n = 0, k;
int partition(int l, int r)
{int i = l, j = r+1;while(true){while(a[++i]<a[l] && i<r);while(a[--j]>a[l]);if(i>=j)break;swap(a[i], a[j]);}swap(a[l], a[j]);return j;
}
int quick_sort(int l, int r)
{if(l<r){int p = partition(l, r);if(p>=9) quick_sort(l, p-1);else if(p<=4)quick_sort(p+1, r);else{quick_sort(l, p-1);quick_sort(p+1, r);} }
}
int main(){while(cin>>k){if(k==0)break;a[n++] = k;}quick_sort(0, n-1);for(int i=4; i<=9; i++)cout << a[i] << endl;return 0;
}
#include<iostream>
using namespace std;
int a[500001]; //全局才能不超时
int find(int low,int high,int k)
{int temp=a[low];int low_temp=low;int high_temp=high;while(low<high){while(low<high && a[high]>=temp)high--;a[low]=a[high];while(low<high && a[low]<=temp)low++;a[high]=a[low];}a[low]=temp;if(low==k)return a[low];else if(low>k)return find(low_temp,low-1,k);elsereturn find(low+1,high_temp,k); //因为是下标,所以是K }
int main()
{int x,i,num;for(num=0;;num++){cin>>x;if(x==0) break;a[num]=x;}for(i=5;i<=10;i++){x=find(0,num-1,i-1);cout<<x<<endl;}
}
1001 Problem B
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 : 65536/32768 KB(Java/Others)
Submits : 55 | Solved : 7
题目描述
对于一个2行N列的走道。现在用12或22的砖去铺满。问有多少种不同的方式(请用递推方式求解)。如果N很大,需要高精度计算。下图是一个2行17列的走道的某种铺法:
输入要求
一个整数N,N<=1000。
输出要求
共有多少种铺法。
输入样例
30
输出样例
715827883
分析
1 大整数的加法用string
2 铺砖问题:
每次铺砖时考虑的情况大致类似,所以可以用递归求解。根据最后剩余的列数,我们将本问题分成两种情况:
A:最后剩余一列,那么假设把这列去掉后,其铺砖情况与n-1时的情况一样,而加上后,也只有一种情况所以方法数位pave(n-1)
B:最后剩余两列,那么把这两列先去掉后和n-2的情况一样,加上这两列后一共有三种情况:12竖着放2列,12横着放,22直接填满。因为12竖着放和A情况重复,所以方法数为pave(n-2)*2
综上:方法总数=pave(n-1)+2*pave(n-2)
// An highlighted block
#include<iostream>
#include <algorithm>
#include<string>
using namespace std;
//用string实现大整数加法
string myadd(string a,string b){reverse(a.begin(),a.end());//字符串翻转reverse(b.begin(),b.end());int len;if(a.length()>b.length()){len=a.length(); //记录长的长度while(b.length()==len) b+=" ";//末尾补齐}else{len=b.length(); while(a.length()==len) a+=" ";}int i=0,t=0;string ans;while(i<len){t+=a[i]-'0'+b[i]-'0';ans+=(t%10+'0');//拼接t/=10;i++;}if(t>0) ans+=t+'0';//进位加上reverse(ans.begin(),ans.end());return ans;
}int main(){int n;string dp[1200];dp[0]="1";dp[1]="1";dp[2]="3";for(int i=3;i<=1000;i++){dp[i]=myadd(dp[i-1],myadd(dp[i-2],dp[i-2]));}while(cin>>n){ cout<<dp[n]<<endl;}return 0;
}
1002 Problem C
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 : 65536/32768 KB(Java/Others)
Submits : 56 | Solved : 11
题目描述
一个N×N的街区,左上角为[1,1],右下角为[N,N],(N<100)。现要求出从左上角到右下角的路径总数,每次只能向下或向右走。
路径中有M个街区有障碍(M<10),不能通过,但不会形成到不了终点的情况。
每条路上的汇总路径数都要对10000取余,以免数据溢出。
输入要求
第一行:两个整数N和M;分别表示街区维度和障碍数;
第二行开始M行:障碍所在的街区。
输出要求
输出满足题意的路径数。
输入样例
3 1
3 1
输出样例
5
// An highlighted block
# include<iostream>
using namespace std;
int dp[101][101]; // 保存走到每个街区的路数int main()
{for(int i=0;i<=100;i++)for(int j=0;j<=100;j++)dp[i][j] = 1;int n,m; // 街区的维数和障碍数cin >> n >> m;while(m--) // 将每个有障碍的街区置为0 {int a, b;cin >> a >> b;dp[a][b] = 0;}for(int i=1; i<=n; i++)for(int j=1; j<=n; j++){if(dp[i][j] != 0) //不考虑已经被置为0的有障碍的街区 {if(i==1 && j!=1) // 给第一行街区赋值,不包括初始位置 dp[i][j] = dp[i][j-1];else if(i!=1 && j==1) // 给第一列街区赋值,不包括初始位置dp[i][j] = dp[i-1][j];else if(i!=1 || j!=1) //除初始位置的其他位置 dp[i][j] = (dp[i][j-1] + dp[i-1][j]) % 10000 ; // 每个街区的路径数为左边街区的路径数和上方路径数之和 }}cout << dp[n][n] << endl; return 0;
}
练习1-递推(找数字\街区\铺砖)相关推荐
- MT【103】二阶递推找规律
评:如果直接找$a_n$的二阶递推式:$a_{n+2}-2\sqrt{2}a_{n+1}-a_n=0$有根号,不利于估计尾数. 转载于:https://www.cnblogs.com/mathstud ...
- 【递推】Ybt_平铺方案
题目大意 用 2∗12 * 12∗1 或 2∗22 * 22∗2 的瓦片,平铺 2∗n2 * n2∗n 矩形的方案数? 其中, 0<=n<=2500 <= n <= 2500& ...
- Codeforces 1327 E. Count The Blocks(递推找规律)
题意: 给出一个 n n n,求 1 0 n 10^n 10n 内长度为 1 1 1到 n n n的块分别有多少个.块的含义是连续相同数字的长度. 第一眼以为数位 d p dp dp 暴力打表出前几项 ...
- *【HDU - 1517】【POJ - 2505】A Multiplication Game(博弈,递推找规律或SG函数)
题干: Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers ...
- 牛客网 水题 递推找规律
链接: https://www.nowcoder.com/acm/contest/91/E 来源:牛客网 小Y买了很多苹果,但他很贪吃,过了几天一下就吃剩一只了.每一天小Y会数出自己的苹果个数X,如果 ...
- 经典算法——数字三角形的三种解题方法:递推、记忆化搜索、动态规划
上题目链接: http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/1730.html 递推方法: i ...
- 【递推】 铺砖2!!!
铺砖2 序言 这篇博客我还是准备讲一讲递推这个板块的题.反正我是觉得基本上所有的递推题只要找到了递推式,那都是小case. 题目 现在上题: 题目描述 对于一个2行N列的走道.现在用1 * 2,2 * ...
- 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例二 | 修改边界条件 | 使用递推方法证明 )
文章目录 一.根据 " 线性常系数差分方程 " 与 " 边界条件 " 确定系统是否是 " 线性时不变系统 " 案例 1.使用递推方法证明 2 ...
- 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例 | 使用递推方法证明 )
文章目录 一.根据 " 线性常系数差分方程 " 与 " 边界条件 " 确定系统是否是 " 线性时不变系统 " 案例 1.使用递推方法证明 2 ...
最新文章
- numpy中的cov(方差计算)简单介绍
- java分布式锁解决方案 redisson or ZooKeeper
- Asp.net MVC生命周期
- 脑电分析系列[MNE-Python-12]| 注释连续数据
- ASP.NET Core Cookie SameSite
- html文字置顶标签,HTML的marquee标签怎么用?
- ie6 offsetWidth/offsetHeight无效
- Visual Studio 2015 单元测试(c++初试)
- python不定参数的函数实现_python传入不定参数是什么
- 策略模式和工厂模式的区别_设计模式系列 — 策略模式
- 信息周刊:随意设置电脑密码存在安全隐患
- 3.mysql的主从原理是什么_mysql 的主从实现原理
- Dell XPS BIOS强制降级方法
- 算法设计-天下会评选一级弟子
- 戴口罩写代码,程序员干脆穿越到了古代
- 深搜(不撞南墙不回头),迷宫问题
- IDEA-第一个Javaweb项目
- 72个免费学习网站,涵盖所有,你值得拥有!【非推广】
- 已知三角形三边,如何使用Python计算三角形的面积
- 社会工程学之信息刺探