题目涉及算法:

  • 数的计算:动态规划;
  • 最大公约数和最小公倍数问题:质因数分解;
  • 求先序排列:递归;
  • 装箱问题:动态规划(纯0-1背包问题)

数的计算

题目链接:https://www.luogu.org/problem/P1028

这道题目可以用动态规划进行求解。

我们令 \(f[i]\) 表示自然数为 \(i\) 能够生成的数的个数,则:

\(f[i] = 1 + \sum_{j=1}^{n/2} f[j]\)

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int n, f[maxn];
int main() {
cin >> n;
for (int i = 1; i <= n; i ++) {
f[i] = 1;
for (int j = 1; j <= i/2; j ++)
f[i] += f[j];
}
cout << f[n] << endl;
return 0;
}

最大公约数和最小公倍数问题

题目链接:https://www.luogu.org/problem/P1029

这道题目虽然名为“最大公约数和最小公倍数问题”,但其实是一道 质因数分解 的问题。

首先,如果P不能整除Q,那么答案肯定为 \(0\) ,直接输出 \(0\) 即可。

其次,我们令 \(n = Q/P\) ,然后对 \(n\) 进行质因数分解,假设对 \(n\) 进行质因数分解的表达式为:

\(n = a_1^{b_1} \times a_2^{b_2} \times \dots \times a_m^{b_m}\)

那么我们知道,对于其中的任意一个 \(a_i\) ,它要么归到 \(x0\) ,要么归到 \(y0\) ,不可能有 \(1\) 个 \(a_i\) 归到 \(x0\) ,而另一个 \(a_i\) 归到 \(y0\) (因为这个时候他们的最大公约数就变成了 \(x0 \times a_i\)) ,所以对于这 \(m\) 个 \(a_i\) ,他们要么都归到 \(x0\) ,要么都归到 \(y0\) ,所以总的方案数就是 \(2^m\) 。

实现代码如下(代码中我用 \(cnt\) 来表示不同的质因数个数):

#include <bits/stdc++.h>
using namespace std;
int n, m, P, Q, cnt;
long long ans = 1;
int main() {
cin >> P >> Q;
if (Q % P) {
puts("0");
return 0;
}
n = Q / P;
m = sqrt(n);
for (int i = 2; i <= m; i ++) {
if (n % i == 0) {
cnt ++;
while (n % i == 0) n /= i;
}
}
if (n > 1) cnt ++;
cout << ( 1LL << cnt ) << endl;
return 0;
}

求先序排列

题目链接:https://www.luogu.org/problem/P1030

这道题目可以用“递归”进行求解。

首先,后续序列的最后一个元素肯定是当前子树的根节点。

我们可以在中序序列里面找到根节点的位置,然后中序序列例根节点左边的子串对应该根节点的左子树,右边的子串对应根节点的右子树。我们递归地进行遍历就可以还原出这棵树。

同时,我们在递归的时候其实也可以直接输出这棵树的先序遍历结果。

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
char zx[10], hx[10]; // zx:中序序列;hx:后序序列
// [L1,R1]对应中序序列的区间范围;
// [L2,R2]对应后序序列的区间范围
void dfs(int L1, int R1, int L2, int R2) {
if (L1 >= R1) {
if (L1 == R1) putchar(zx[L1]);
return;
}
int i;
for (i = L1; i <= R1 && zx[i] != hx[R2]; i ++);
putchar(zx[i]);
int l_len = i - L1, r_len = R1 - i;
dfs(L1, i-1, L2, L2+l_len-1);
dfs(i+1, R1, R2-r_len, R2-1);
}
int main() {
cin >> zx >> hx;
int len = strlen(zx);
dfs(0, len-1, 0, len-1);
return 0;
}

装箱问题

题目链接:https://www.luogu.org/problem/P1049

这道题目是一道纯0-1背包问题。

对于第i件物品,我们令它的体积等于价值,套0-1背包模板能够得到能装进箱子的最大价值。以箱子总体积减去总价值就是箱子的最小的剩余空间。

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 20020;
int n, V, c, f[maxn];
int main() {
cin >> V >> n;
while (n --) {
cin >> c;
for (int i = V; i >= c; i --)
f[i] = max(f[i], f[i-c] + c);
}
cout << V - f[V] << endl;
return 0;
}

作者:zifeiy

2001年NOIP普及组复赛题解的更多相关文章

  1. 2010年NOIP普及组复赛题解

    题目及涉及的算法: 数字统计:入门题: 接水问题:基础模拟题: 导弹拦截:动态规划.贪心: 三国游戏:贪心.博弈论. 数字统计 题目链接:洛谷 P1179 这道题目是一道基础题. 我们只需要开一个变量 ...

  2. 2017年NOIP普及组复赛题解

    题目涉及算法: 成绩:入门题: 图书管理员:模拟: 棋盘:最短路/广搜: 跳房子:RMQ/二分答案/DP(本人解法). 成绩 题目链接:https://www.luogu.org/problemnew ...

  3. 2016年NOIP普及组复赛题解

    题目涉及算法: 买铅笔:入门题: 回文日期:枚举: 海港:双指针: 魔法阵:数学推理. 买铅笔 题目链接:https://www.luogu.org/problem/P1909 设至少要买 \(num ...

  4. 2014年NOIP普及组复赛题解

    题目涉及算法: 珠心算测验:枚举: 比例简化:枚举: 螺旋矩阵:模拟: 子矩阵:状态压缩/枚举/动态规划 珠心算测验 题目链接:https://www.luogu.org/problem/P2141 ...

  5. 2013年NOIP普及组复赛题解

    题目涉及算法: 计数问题:枚举: 表达式求值:栈: 小朋友的数字:动态规划: 车站分级:最长路. 计数问题 题目链接:https://www.luogu.org/problem/P1980 因为数据量 ...

  6. 2011年NOIP普及组复赛题解

    题目涉及算法: 数字反转:模拟: 统计单词数:模拟: 瑞士轮:模拟/排序: 表达式的值:后缀表达式/DP. 数字反转 题目链接:https://www.luogu.org/problem/P1307 ...

  7. 2008年NOIP普及组复赛题解

    题目涉及算法: ISBN号码:简单字符串模拟: 排座椅:贪心: 传球游戏:动态规划: 立体图:模拟. ISBN号码 题目链接:https://www.luogu.org/problem/P1055 简 ...

  8. 2005年NOIP普及组复赛题解

    题目涉及算法: 陶陶摘苹果:入门题: 校门外的树:简单模拟: 采药:01背包: 循环:模拟.高精度. 陶陶摘苹果 题目链接:https://www.luogu.org/problem/P1046 循环 ...

  9. 2018年NOIP普及组复赛题解

    题目涉及算法: 标题统计:字符串入门题: 龙虎斗:数学题: 摆渡车:动态规划: 对称二叉树:搜索. 标题统计 题目链接:https://www.luogu.org/problem/P5015 这道题目 ...

随机推荐

  1. SVN failed: 405 Method Not Allowed

    SVN update 时,错误:PROPFIND request on '/svn/xxxx' failed: 405 Method Not Allowed. 解决办法如下: 第一步:查看SVN服务器 ...

  2. nginx反项代理的简单配置

    在ubuntu 16.04下安装nginx, apt-get install nginx就可以了. 然后安装了node, npm, 写了个简单的main.js,启动了一个http,并监听 8888 然 ...

  3. 写论文,没数据?R语言抓取网页大数据

    写论文,没数据?R语言抓取网页大数据 纵观国内外,大数据的市场发展迅猛,政府的扶持也达到了空前的力度,甚至将大数据纳入发展战略.如此形势为社会各界提供了很多机遇和挑战,而我们作为卫生(医学)统计领域的 ...

  4. 【JZOJ3640】【COCI2014】utrka

    Mission 2<=N<=300,2<=M<=N∗(N−1) Solution SPFA. 由于只是二元关系,所以条件随便写. 具体来说,如果是u⇒v. 若v的最大领先时间还 ...

  5. [运维]Dell R710 raid配置 标签: raid运维 2017-04-15 19:35 581人阅读 评论(16)

    Dell R系列的一些服务器,raid的配置都大同小异,公司大部分的服务器,都是Dell R710型号的,这个型号的raid界面配置起来还是很简单的,下面来跟随小编体验一下raid如何配置吧.ps:图 ...

  6. 如何在Liferay 7中用html显示页面

    liferay portlet默认的显示页面是view.jsp,虽然可以在jsp中用include标签包括html文件,但是如何直接通过修改配置文件让默认的显示页面为view.html呢? 1.用Li ...

  7. TCP keepalive的机理及使用

    TCP 是面向连接的 , 在实际应用中通常都需要检测对端是否还处于连接中.如果已断开连接,主要分为以下几种情况: 1.连接的对端正常关闭,即使用 closesocket 关闭连接. 2.连接的对端非正 ...

  8. 跨域知识(二)——JSONP

    JSONP是服务器与客户端跨源通信的常用方法.最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小. 它的基本思想是,网页通过添加一个<script>元素,向服务器请求JSON数据, ...

  9. 自定义注解--Annotation

    Annotation 概念:注解 原理 是一种接口,通过反射机制中的相关API来访问annotation信息 常见的标准Annotation @Override   方法重写 @Deprecated  ...

  10. golang进制