title: C++奥赛一本通刷题记录(递推)
date: 2017-11-08
tags:

  • 一本通
  • openjudege
    categories: OI

C++奥赛一本通刷题记录(递推)

2017.11.8 By gwj1139177410

  1. 斐波那契数列 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;
    }
    
  2. 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;
    }
    
  3. 上台阶 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;
    }
    
  4. 流感传染 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;
    }
    
  5. 放苹果 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;
    }
    
  6. 吃糖果 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;
    }
    
  7. 移动路线 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;
    }
    
  8. 判断整除 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;
    }
    
  9. 踩方格 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;
    }
    
  10. 山区建小学 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++奥赛一本通递推题解相关推荐

  1. 昆虫繁殖《信息学奥赛一本通-递推算法》

    [题目描述] 科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强.每对成虫过x个月产y对卵,每对卵要过两个月长成成虫.假设每个成虫不死,第一个月只有一对成虫,且卵长成成虫后的第一个月不产卵 ...

  2. 信息学奥赛一本通超详细题解,动画图文题解

    内容来源于微信公众号:大神编程.已经过原文作者授权. 更新时间:2020-11-5 现在开始更新基础算法题. 个人感言:从未见过如此详细的题解,动画.图文结合,适合任何水平的选手.尤其是特别适合自学的 ...

  3. 信息学奥赛一本通高手训练题解目录

    第1部分 基础算法(高手训练)-->第1章 贪心算法 1.1.1 扑克牌 1.1.2 游戏通关 1.1.3 楼间跳跃 1.1.4 堆蛋糕 1.1.5 塔 第1部分 基础算法(高手训练)--> ...

  4. 信息奥赛一本通的递推练习

    信息奥赛一本通的递推练习 递推与动态规划 1313:位数问题 1314:过河卒 1194:移动路线 1196:踩方格 递推与动态规划 递推解决的问题中满足最优化原理的也是属于动态规划范畴 1313:位 ...

  5. C++奥赛一本通递归题解

    title: C++奥赛一本通刷题记录(递归) date: 2017-11-09 tags: 一本通 openjudege categories: OI C++奥赛一本通刷题记录(递归) 2017.1 ...

  6. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  7. P1541 乌龟棋 题解(洛谷,动态规划递推)

    题目:P1541 乌龟棋 感谢大神的题解(他的写的特别好) 写一下我对他的代码的理解吧(哎,蒟蒻就这能这样...) 代码: #include<bits/stdc++.h> #define ...

  8. 信息学奥赛一本通(题解目录)

    信息学奥赛一本通(题解目录) 记录了我从初学者到逐渐熟悉c++的成长之路 信息学奥赛一本通OJ 目录 信息学奥赛一本通(题解目录) 前言 一.语言及算法基础篇 基础(一) C++语言 第一章 C++语 ...

  9. 信息奥赛一本通 三角形最佳路径问题 (1288) 题解

    信息奥赛一本通 三角形最佳路径问题 (1288) 题解 时间限制: 1000 ms 内存限制: 65536 KB 题目描述 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 ...

最新文章

  1. 用tarball实现liferay自动安装部署15-复制定制后的catalina.sh
  2. python3 多进程共享变量实现方法
  3. spring拦截器覆盖_Spring中使用Interceptor拦截器
  4. 前端之JQuery(一)
  5. swift 适配的方法autolayout  和 masory===snapKit库
  6. setHeadAndPropagate
  7. 当退出python时是否释放全部内存_python 关于高级特性的问题
  8. stm32 PWM输入捕获
  9. nginx expires配置
  10. java 通过eclipse编辑器用mysql尝试 连接数据库
  11. UVM的factory机制
  12. It’s Android Time
  13. 软件概要设计书写模板
  14. AUTOSAR SWS SOME/IP Transformer
  15. 使用Matlab软件进行逐像元Hurst指数分析
  16. 【Codeforces 760 B Frodo and pillows】+ 二分
  17. linux服务器网卡极限速率,linux下简单限制网卡速度
  18. thinkphp6+layui BBS社区论坛系统源码分享,支持适配移动端附截图
  19. 应用程序“Parallels Desktop“无法打开MAC电脑打不开
  20. SCORM 1.2與SCORM 2004規範之初步比較

热门文章

  1. Matlab Tricks(十一)—— padarray 关于边缘成镜像对称
  2. Linux 下 Git 的源码安装
  3. PB级(大数据)的来源
  4. 为何python不好找工作-为什么我不建议你通过 Python 去找工作?
  5. python网课推荐-python网课什么平台好
  6. 编程语言python怎么读-Python入门学习的计算机程序设计语言是怎样的?
  7. python基础代码大全-python基础代码大全
  8. python语言-Python语言介绍
  9. python编程是啥-Python编程
  10. 数据库与hadoop_OLTP,MPP和Hadoop