题目涉及算法:

  • 质因数分解:入门;
  • 寻宝:模拟;
  • 摆花:动态规划;
  • 文化之旅:搜索。

质因数分解

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

这道题目只需要开个 for 循环就能够把书求出来。

开一个循环变量 i 从 2 开始一直加加,碰到的第一个能够整除n的i,就输出 \(n/i\) 然后 break 即可。

实现代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n;
  4. int main() {
  5. cin >> n;
  6. for (int i = 2; ; i ++) if (n % i == 0) { cout << n / i << endl; break; }
  7. return 0;
  8. }

寻宝

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

标准模拟题,模拟一下爬房间的过程即可。

但是我语文不好,这道题目读了半天才读懂。

可以优化,优化原理是去除没存寻找的循环。

实现代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MOD = 20123;
  4. int n, m, has_key[10010][110], num[10010][110], sum[10010], id, ans;
  5. int main() {
  6. cin >> n >> m;
  7. for (int i = 0; i < n; i ++)
  8. for (int j = 0; j < m; j ++) {
  9. cin >> has_key[i][j] >> num[i][j];
  10. if (has_key[i][j]) sum[i] ++;
  11. }
  12. cin >> id;
  13. for (int i = 0; i < n; i ++) {
  14. int cnt = 0;
  15. int x = num[i][id] % sum[i];
  16. if (x == 0) x = sum[i];
  17. ans = (ans + num[i][id]) % MOD;
  18. while (true) {
  19. if (has_key[i][id]) {
  20. cnt ++;
  21. if (cnt == x) break;
  22. }
  23. id = (id + 1) % m;
  24. }
  25. }
  26. cout << ans << endl;
  27. return 0;
  28. }

摆花

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

这道题目用动态规划求解。

我们令状态 \(f[i][j]\) 表示前 \(i\) 种花一共放了 \(j\) 盆的方案数,则:

  • \(f[0][0] = 0\) ;
  • \(f[i][j] = \sum_{k=0}^{\min(a[i], j)} f[i-1][k]\)

实现代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int MOD = 1000007;
  4. const int maxn = 110;
  5. int n, m, a[maxn], f[maxn][maxn];
  6. int main() {
  7. cin >> n >> m;
  8. for (int i = 1; i <= n; i ++) cin >> a[i];
  9. f[0][0] = 1;
  10. for (int i = 1; i <= n; i ++)
  11. for (int j = 0; j <= m; j ++)
  12. for (int k = 0; k <= a[i] && j-k >= 0; k ++)
  13. f[i][j] = (f[i][j] + f[i-1][j-k]) % MOD;
  14. cout << f[n][m] << endl;
  15. return 0;
  16. }

文化之旅

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

建图,按条件深度优先搜索一下。

然后这道题目的数据可能比较水,所以我在其中加了一个条件,就是步数超过1000我就直接判定为找不到,然后就AC了囧~。

实现代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 110;
  4. int N, K, M, S, T, d = INT_MAX, c[maxn], a[maxn][maxn], u, v, w;
  5. bool vis[maxn];
  6. vector< pair<int, int> > g[maxn];
  7. void dfs(int u, int tmp) {
  8. if (tmp >= 1000) return; // 没想到这样就AC了~~~
  9. if (tmp >= d) return;
  10. if (u == T) {
  11. d = tmp;
  12. return;
  13. }
  14. vis[ c[u] ] = true;
  15. int sz = g[u].size();
  16. for (int i = 0; i < sz; i ++) {
  17. int v = g[u][i].first;
  18. int w = g[u][i].second;
  19. if (vis[ c[v] ] ) continue;
  20. bool flag = true;
  21. for (int i = 1; i <= K; i ++) {
  22. if (vis[i] && a[ c[v] ][i]) {
  23. flag = false;
  24. break;
  25. }
  26. }
  27. if (flag) {
  28. dfs(v, tmp+w);
  29. }
  30. }
  31. vis[ c[u] ] = false;
  32. }
  33. int main() {
  34. cin >> N >> K >> M >> S >> T;
  35. for (int i = 1; i <= N; i ++) cin >> c[i];
  36. for (int i = 1; i <= K; i ++)
  37. for (int j = 1; j <= K; j ++)
  38. cin >> a[i][j];
  39. while (M --) {
  40. cin >> u >> v >> w;
  41. g[u].push_back( make_pair(v, w) );
  42. g[v].push_back( make_pair(u, w) );
  43. }
  44. dfs(S, 0);
  45. if (d == INT_MAX) d = -1;
  46. cout << d << endl;
  47. return 0;
  48. }

2012年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. Sql server定时执行某个sql 通过Windows 计划任务(非代理Job方式)

    建立 bat文件.内容如下: osql -s "xxx.xxx.xx.x" -U sa -P sa -d DB -i TruncateSql.sql osql -S "l ...

  2. myeclipse10 java builder path libraries 添加tomcat

    Error:     The import javax.servlet cannot be resolved     The import javax.servlet.http.HttpServlet ...

  3. 三、Redis操作

    一.基本介绍 1.简介 Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...

  4. 【风马一族_php】

    原文来自:http://www.cnblogs.com/sows/p/6054383.html  (博客园的)风马一族 侵犯版本,后果自负 2016-11-11   15:13:51 回顾 数组:分配 ...

  5. PSPP:顶替SPSS常用功能的优秀软件, Linux 下的经济学用软件

    几个替代SPSS的软体Salstat http://salstat.sourceforge.net/PSPP http://www.gnu.org/software/pspp/pspp.htmlR h ...

  6. typora 使用

    菜单 输入+换行键,产生标题,自动更新 [toc] [TOC] 段落 按换行键建立新的一行可在行尾插入打断线,禁止向后插入 按换行键建立新的一行<br/> 标题 开头#的个数表示,空格+文 ...

  7. springboot(十九)使用actuator监控应用【转】【补】

    springboot(十九)使用actuator监控应用 微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的 ...

  8. springboot集成mongoDB 异常认证

    1.springboot连接mongoDB 出现异常认证 异常详情: com.mongodb.MongoSecurityException: Exception authenticating Mong ...

  9. n!素因子p的幂 swjtuOJ 2090【数论】

    原文地址:http://blog.csdn.net/u012717411/article/details/47334969(感谢作者) 素因子分解写的非常好!数论一道好题:给以两个大整数n,s(n&l ...

  10. sqlplus连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0解决

    sqlplus连接数据库报错SP2-0642: SQL*Plus internal error state 2130, context 0:0:0解决 sqlplus 连接数据库报错SP2-0642: ...