跳至正文

技术

Jam的计数法 解题报告

  • OI路程

这题我用的深搜,写来写去都觉得特别麻烦,干脆把从a到b的所有可能都计算出来,然后判断是否比输入的大,是就输出,让计数器加一,到五就退出程序,等下还优化试下,先把这个的代码贴上来。

C语言:

#include <stdio.h>
#include <stdlib.h>
#inc[......]

继续阅读

开心的金明 解题报告

  • OI路程

这题可以说就是01背包的例题,我没什么多余的解释,上代码:

C语言:


#include <stdio.h>
#define max(a, b) ((a)>(b)?(a):(b))
int f[30000];

int main(void)
{
 int n, m;
 int i,[......]

继续阅读

明明的随机数 解题报告

  • OI路程

这题不难,不过我看到大部分的人都是使用的先用快排再去重,有些人是先去重再用快排,我这里就用的是哈希排序,能够以线性时间(O(n))对所有数据实现排序和去重。
没什么好解释的,1~1000,把对应的数字放到相应的数组中就可以了。

#include <stdio.h>
char bucket[......]

继续阅读

NOIP_2002.PJ1:级数求和 解题报告

  • OI路程

这题网上没找到较好的算法(数学方法),只好自己写暴力版本的了。。。这题真的不好做什么报告,提交就是。

#include <stdio.h>

int main(void)
{
 double n;
 int i;
 double ans = 0;
 scanf(%lf, &n);[......]

继续阅读

NOIP_2001.PJ4:装箱问题 解题报告

  • OI路程

什么都不说了,简单的DP,直接上代码。
唯一注意的一点,我不是用的剩余做DP值,而是和普通的DP一样,最后再用总质量剪掉这个DP值。

C语言:

#include <stdio.h>
#define max(a, b) ((a)>(b)?(a):(b))

int f[20001];[......]

继续阅读

NOIP_2001.PJ3:求先序排列 解题报告

  • OI路程

在车上想了好久,终于找到了突破口,后序遍历不就是说最后一个节点就是当前书的根节点吗?那不就好说了,先把后序中的最后一个节点在中序中找到下标i,那小于i的便是左子树了,大于的的便是右子树了,而题目要的是先序,那就先把第i个(即后序的最后一个)输出来,然后再分别对左子树和右子树进行递归,然后后序从0~i[……]

继续阅读

NOIP_2001.PJ1:数的计数 解题报告

  • OI路程

刚看到题目被吓到了,下面有一个Hit(提示),说用高精度,高精度我以前写过一次,几乎忘干净了……后来琢磨了好久,发现能够使用动态规划,注意观察一下样例,输入是6,共有:
6
16
26
126
36
136
设f[i]是以自然数i在最左边的个数,那么很容易发现方程f[i] = f[1] + f[2][……]

继续阅读

NOIP 2000 普及组4 单词接龙 解题报告

  • OI路程

哈,这题拿到手时刚开始不知道怎么开始,后来找到了突破点,用f[i][j]记录第i个字符串和第j个字符串重复的字符数,就是说把第i个字符串和第j个字符串之间接起来重合的字符数目。
把这个处理好了就好下手了,不过这里我忽略了两点,导致提交了几次NOIP。第一点f[i][j]中的i,j可以重复!也就是说自己可以接[……]

继续阅读

乘积最大 解题报告

  • OI路程

拿到题目就想到是一个深搜的题目(可能有其他更快的算法,比如什么用数学解的啊,那种。),便开始下手,对所有的情况进行枚举,算出乘值,与ans变量进行比较,比ans大就覆盖ans,否则继续枚举下一种情况,直至全部枚举完。结果忘记考虑会分成0的情况,导致被除数为0!(所以还是提交了两次,乘积最大

等下我还到网上[……]

继续阅读