C++奥赛一本通递推题解
title: C++奥赛一本通刷题记录(递推)
date: 2017-11-08
tags:
- 一本通
- openjudege
categories: OI
C++奥赛一本通刷题记录(递推)
2017.11.8 By gwj1139177410
斐波那契数列 openjudge1760
#include<iostream> using namespace std; const int maxn=1000010, mod=1000; int f[maxn]; int main(){f[1] = f[2] = 1;for(int i = 3; i <= maxn; i++)f[i] = (f[i-1]+f[i-2])%mod;//bugsint t; cin>>t;while(t--){int n; cin>>n;cout<<f[n]<<"\n";}return 0; }
pell数列 noioj1071&openjudge1788
#include<iostream> using namespace std; const int maxn = 1000000+10,mod=32767; int f[maxn]; int main(){f[1]=1; f[2]=2;int k = maxn;for(int i = 3; i <= k; i++)f[i]=(2*f[i-1]+f[i-2])%mod;//bugsint n; cin>>n;while(n--){cin>>k;cout<<f[k]<<"\n";}return 0; }
上台阶 openjudge3525
//f[i]表示走i阶台阶的走法数目 //因为每次只能走一阶或者两阶,所以由f[i-1]和f[i-2]相加转移而来 #include<iostream> using namespace std; const int maxn = 110; int f[maxn], n; int main(){f[1] = 1; f[2] = 2; f[3] = 4;for(int i = 4; i < maxn; i++)f[i] = f[i-1]+f[i-2]+f[i-3];while(cin>>n && n)cout<<f[n]<<"\n";return 0; }
流感传染 openjudge6262
//BFS模板 #include<iostream> #include<queue> using namespace std; const int maxn = 110;char a[maxn][maxn]; int n, m, cnt; int vis[maxn][maxn];struct node{int x, y, step;node(int x,int y, int step){this->x = x;this->y = y;this->step = step;}; }; const int dx[] = {0,-1,0,1}; const int dy[] = {1,0,-1,0}; queue<node>q; void bfs(){while(q.size()) {node t = q.front(); q.pop();for(int i = 0; i < 4; i++){int nx = t.x+dx[i], ny = t.y+dy[i], st = t.step+1;if(st == m){cout<<cnt<<"\n";return ;}if(nx>=1&&nx<=n&&ny>=1&&ny<=n&&a[nx][ny]!='#'&&!vis[nx][ny]){q.push(node(nx,ny,st));vis[nx][ny] = 1;cnt++;}}}cout<<cnt<<"\n";//bugsreturn ; }int main(){cin>>n; cin.get(); //datain bugsfor(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){a[i][j]=getchar();if(a[i][j]=='@'){q.push(node(i,j,0));vis[i][j] = 1;cnt++;}}getchar();}cin>>m; cin.get();bfs();return 0; }
放苹果 openjudge666&POJ1664&luogu2386
//f[i][j]表示i个苹果j个盘子的放法数目 //j>i时,去掉空盘不影响结果; j<=i时,对盘子是否空着分类讨论;* #include<iostream> using namespace std; const int maxn = 11; int f[maxn][maxn]; int main(){for(int i = 0; i < maxn; i++)f[0][i]=f[i][1]=1;for(int i = 1; i < maxn; i++)//pojbugsfor(int j = 2; j < maxn; j++)f[i][j] = j>i?f[i][i]:f[i][j-1]+f[i-j][j];//所有盘子又有苹果时每个盘子都去掉一个苹果不影响结果int t; cin>>t;while(t--){int n, m;cin>>n>>m;cout<<f[n][m]<<"\n";}return 0; }
吃糖果 openjudge1944
//f[i]表示名名吃i块巧克力的方案数, f[0]=f[1]=1; #include<iostream> using namespace std; int f[30]; int main(){int n; cin>>n;f[0] = f[1] = 1;for(int i = 2; i <= n; i++)f[i%2]=f[(i-1)%2]+f[(i-2)%2];cout<<f[n%2];return 0; }
移动路线 openjudge2781
//f[i][j]表示从(m,1)到(i,j)的不同路线数目 #include<iostream> using namespace std; const int maxn = 30; int f[maxn][maxn]; int main(){int m, n; cin>>m>>n;f[m][0] = 1;for(int i = m; i >= 1; i--)for(int j = 1; j <= n; j++)f[i][j] = f[i+1][j]+f[i][j-1];cout<<f[1][n];return 0; }
判断整除 openjudge3531
//f[i][j]表示用前i个数计算能得到余数j* #include<iostream> using namespace std; const int maxn = 10010, maxk = 110; int a[maxn], f[maxn][maxk]; int main(){int n, k; cin>>n>>k;for(int i = 1; i <= n; i++)cin>>a[i],a[i]%=k;f[1][a[1]] = 1;for(int i = 2; i <= n; i++)for(int j = 0; j < k; j++)if(f[i-1][j])f[i][(j+a[i])%k]=f[i][(j-a[i]+k)%k]=1;if(f[n][0])cout<<"YES\n";else cout<<"NO\n";return 0; }
踩方格 openjudge4982
//l[i],r[i],u[i]分别表示最后一步向左向右向上走到第i格* #include<iostream> using namespace std; const int maxn = 30; int l[maxn], r[maxn], u[maxn]; int main(){int n; cin>>n;l[1] = r[1] = u[1] = 1;for(int i = 2; i <= n; i++){l[i] = l[i-1]+u[i-1];r[i] = r[i-1]+u[i-1];u[i] = l[i-1]+r[i-1]+u[i-1];}cout<<l[n]+r[n]+u[n]<<"\n";return 0; }
山区建小学 openjudge7624
//f[i][j]表示1..i中建j个小学的最小距离和.(这里的j可以看成是最后一所学校管辖区的终点) //f[i][j]=min(f[i][j],f[k][j-1]+s[k+1][i]),j-1<=k<i; #include<iostream> #include<algorithm> #include<cmath> using namespace std; const int maxn = 510; int a[maxn],dis[maxn][maxn],s[maxn][maxn],f[maxn][maxn]; //s[管辖区起点][管辖区终点]=这片辖区内建一个学校,区内村庄到学校的最小距离和 //一个结论:因为i..j中选一个点使所有点到这个点的总距离最小,这个点一定在中点位置(反证法,左移右移时) int dist(int l, int r){int m = (l+r)/2, sum = 0;for(int i = l; i <= r; i++)sum += dis[i][m];return sum; } int main(){int m, n;cin>>m>>n;for(int i = 2; i <= m; i++)cin>>a[i],a[i]+=a[i-1];//初始化两两距离for(int i = 1; i <= m; i++)for(int j = 1; j <= m; j++)dis[i][j] = i==j?0:abs(a[j]-a[i]);//计算一个管辖从i到j村庄的学校到这些村庄的距离和for(int i = 1; i <= m; i++)for(int j = 1; j <= m; j++)s[i][j] = dist(i,j);//初始化for(int i = 1; i <= m; i++)for(int j = 1; j <= m; j++)f[i][j] = i==j?0:0xfffff;for(int i = 1; i <= m; i++)f[i][1] = s[1][i];//只建一所学校//DPfor(int i = 2; i <= m; i++)//村庄for(int j = 2; j <= min(i,n); j++)//学校for(int k = j-1; k < i; k++)//枚举已有的(最后一所)学校管辖的范围(终点)if(i!=j)f[i][j] = min(f[i][j],f[k][j-1]+s[k+1][i]);cout<<f[m][n];return 0;}
C++奥赛一本通递推题解相关推荐
- 昆虫繁殖《信息学奥赛一本通-递推算法》
[题目描述] 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对卵要过两个月长成成虫.假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵 ...
- 信息学奥赛一本通超详细题解,动画图文题解
内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...
- 信息学奥赛一本通高手训练题解目录
第1部分 基础算法(高手训练)-->第1章 贪心算法 1.1.1 扑克牌 1.1.2 游戏通关 1.1.3 楼间跳跃 1.1.4 堆蛋糕 1.1.5 塔 第1部分 基础算法(高手训练)--> ...
- 信息奥赛一本通的递推练习
信息奥赛一本通的递推练习 递推与动态规划 1313:位数问题 1314:过河卒 1194:移动路线 1196:踩方格 递推与动态规划 递推解决的问题中满足最优化原理的也是属于动态规划范畴 1313:位 ...
- C++奥赛一本通递归题解
title: C++奥赛一本通刷题记录(递归) date: 2017-11-09 tags: 一本通 openjudege categories: OI C++奥赛一本通刷题记录(递归) 2017.1 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- P1541 乌龟棋 题解(洛谷,动态规划递推)
题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...
- 信息学奥赛一本通(题解目录)
信息学奥赛一本通(题解目录) 记录了我从初学者到逐渐熟悉c++的成长之路 信息学奥赛一本通OJ 目录 信息学奥赛一本通(题解目录) 前言 一.语言及算法基础篇 基础(一) C++语言 第一章 C++语 ...
- 信息奥赛一本通 三角形最佳路径问题 (1288) 题解
信息奥赛一本通 三角形最佳路径问题 (1288) 题解 时间限制: 1000 ms 内存限制: 65536 KB 题目描述 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 ...
最新文章
- 用tarball实现liferay自动安装部署15-复制定制后的catalina.sh
- python3 多进程共享变量实现方法
- spring拦截器覆盖_Spring中使用Interceptor拦截器
- 前端之JQuery(一)
- swift 适配的方法autolayout 和 masory===snapKit库
- setHeadAndPropagate
- 当退出python时是否释放全部内存_python 关于高级特性的问题
- stm32 PWM输入捕获
- nginx expires配置
- java 通过eclipse编辑器用mysql尝试 连接数据库
- UVM的factory机制
- It’s Android Time
- 软件概要设计书写模板
- AUTOSAR SWS SOME/IP Transformer
- 使用Matlab软件进行逐像元Hurst指数分析
- 【Codeforces 760 B Frodo and pillows】+ 二分
- linux服务器网卡极限速率,linux下简单限制网卡速度
- thinkphp6+layui BBS社区论坛系统源码分享,支持适配移动端附截图
- 应用程序“Parallels Desktop“无法打开MAC电脑打不开
- SCORM 1.2與SCORM 2004規範之初步比較