2001年NOIP普及组复赛题解
题目涉及算法:
- 数的计算:动态规划;
- 最大公约数和最小公倍数问题:质因数分解;
- 求先序排列:递归;
- 装箱问题:动态规划(纯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普及组复赛题解的更多相关文章
- 2010年NOIP普及组复赛题解
题目及涉及的算法: 数字统计:入门题: 接水问题:基础模拟题: 导弹拦截:动态规划.贪心: 三国游戏:贪心.博弈论. 数字统计 题目链接:洛谷 P1179 这道题目是一道基础题. 我们只需要开一个变量 ...
- 2017年NOIP普及组复赛题解
题目涉及算法: 成绩:入门题: 图书管理员:模拟: 棋盘:最短路/广搜: 跳房子:RMQ/二分答案/DP(本人解法). 成绩 题目链接:https://www.luogu.org/problemnew ...
- 2016年NOIP普及组复赛题解
题目涉及算法: 买铅笔:入门题: 回文日期:枚举: 海港:双指针: 魔法阵:数学推理. 买铅笔 题目链接:https://www.luogu.org/problem/P1909 设至少要买 \(num ...
- 2014年NOIP普及组复赛题解
题目涉及算法: 珠心算测验:枚举: 比例简化:枚举: 螺旋矩阵:模拟: 子矩阵:状态压缩/枚举/动态规划 珠心算测验 题目链接:https://www.luogu.org/problem/P2141 ...
- 2013年NOIP普及组复赛题解
题目涉及算法: 计数问题:枚举: 表达式求值:栈: 小朋友的数字:动态规划: 车站分级:最长路. 计数问题 题目链接:https://www.luogu.org/problem/P1980 因为数据量 ...
- 2011年NOIP普及组复赛题解
题目涉及算法: 数字反转:模拟: 统计单词数:模拟: 瑞士轮:模拟/排序: 表达式的值:后缀表达式/DP. 数字反转 题目链接:https://www.luogu.org/problem/P1307 ...
- 2008年NOIP普及组复赛题解
题目涉及算法: ISBN号码:简单字符串模拟: 排座椅:贪心: 传球游戏:动态规划: 立体图:模拟. ISBN号码 题目链接:https://www.luogu.org/problem/P1055 简 ...
- 2005年NOIP普及组复赛题解
题目涉及算法: 陶陶摘苹果:入门题: 校门外的树:简单模拟: 采药:01背包: 循环:模拟.高精度. 陶陶摘苹果 题目链接:https://www.luogu.org/problem/P1046 循环 ...
- 2018年NOIP普及组复赛题解
题目涉及算法: 标题统计:字符串入门题: 龙虎斗:数学题: 摆渡车:动态规划: 对称二叉树:搜索. 标题统计 题目链接:https://www.luogu.org/problem/P5015 这道题目 ...
随机推荐
- Hdu 2389 二分匹配
题目链接 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Ja ...
- 初次接触python的re模块
刷CF的时候,看到一个简单的题目,可以用来练练正则表达式 于是乎找到了re.sub的用法,说明如下 re.sub: (pattern, repl, string, count=0, │ f ...
- Object Pool 对象池的C++11使用(转)
很多系统对资源的访问快捷性及可预测性有严格要求,列入包括网络连接.对象实例.线程和内存.而且还要求解决方案可扩展,能应付存在大量资源的情形. object pool针对特定类型的对象循环利用,这些对象 ...
- vue项目开发过程常见问题
更新时间:2018-07-29 1.data functions should return an object // 这个问题是 Vue 实例内,单组件的data必须返回一个对象;如下 <sc ...
- JavaScript--函数中this的几种指向
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在Eclipse中添加Tomcat
在Eclipse中开发web或开启web服务需要Tomcat的支持,在添加Tomcat之前要清楚你的Eclipse版本,如果你的Eclipse是javvEE版的就可以直接安装Tomcat,如果不是就需 ...
- 【JZOJ4899】【NOIP2016提高A组集训第17场11.16】雪之国度
题目描述 雪之国度有N座城市,依次编号为1到N,又有M条道路连接了其中的城市,每一条道路都连接了不同的2个城市,任何两座不同的城市之间可能不止一条道路.雪之女王赋予了每一座城市不同的能量,其中第i座城 ...
- Java练习 SDUT-2192_救基友记2
救基友记2 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 屌丝WP的好基友CZ又被妖鬼给抓走了(CZ啊,CZ-.怎么说 ...
- BZOJ3832Rally题解
一道思维神题.... 我们像网络流一样加入原点S,与汇点T 用f[i]表示原点到i的最长路,用g[i]表示i到汇点的最长路 f数组与g数组都可以dp求出来的 接下来考虑如何通过这些信息来维护删除某个点 ...
- framework7 上拉加载一些ajax问题
1.请求第一组数据后如果不能产生上拉进度条,则无法进行上拉加载. 解决办法:首次加载的数据量设置合理即可. 2.同一组数据请求多次,原因是异步刷新时间差,请求参数未更新,多次触发了上拉加载. 解决办法 ...