Noip 2006 提高组 3 作业调度方案
大部分OJ的题目全部都少了一些,原题见
http://zqynux.blog.163.com/blog/static/167499597201062811365761/
就是简单的贪心,但是要考虑的是首先,A任务的工序2必须在工序1之后完成,而且当满足前面一个条件时(工序2必须在工序1之后完[……]
大部分OJ的题目全部都少了一些,原题见
http://zqynux.blog.163.com/blog/static/167499597201062811365761/
就是简单的贪心,但是要考虑的是首先,A任务的工序2必须在工序1之后完成,而且当满足前面一个条件时(工序2必须在工序1之后完[……]
首先要考虑的是,如果没有主件和附件的话,那题目将会非常的简单,那这就是最简单的01背包了,但是麻烦的是题目有主件和附件。那我们怎么办呢?不做了?开玩笑,既然你走了OI这条路,那就千万别回头!那我能不能用01背包来处理这个题目呢?当然是能的,注意题目中的这句话“每个主件可以有0个、1个或2个附件。[……]
因为以前做过这一题,所以很快就写出来了,不过在一个细节的地方纠结了好久,具体位置见注释。
思路和以前是一样的,f[i][j] = max(map[i] map[i + a] map[i + j] + f[i][a] + f[i + a][j – i]); f[i][j]表示从第i个珠子往后[……]
这个题目网上有很多题解,不过直接照抄的话确实不太好,我还是说说我自己的过程吧。
首先,可以知道的是“核”越长越好,确实说不太清楚,看下面的图吧:
题目困扰了我很久,后来才知道,该怎么解题。
这题说是说矩阵取数,但是仔细看看能够知道,和矩阵没什么关系,只每行的最大值有关,因为每行之间的最大没有任何关系。那么就将矩阵取数转变成了对数组取数,对数组取数很容易看出来是DP,DP方程如下:f[i][j] = max( 2 map[i] +&nb[……]
很简单的一个题目,没一次AC,因为忘记判断0了,有可能出现十位或个位上有零的情况,代码:
#include <stdio.h>
#include <string.h>
int sum;
int used[10];
int ck[10[……]
麻烦的题目,第一次只拿了30分,代码如下:
void[……]
这一题我的思路(应该)是O(nlogn)的,就是进行一趟快排加上对数组进行一次扫描。
快排直接调用库函数,扫描就是用j记录当前自然数,c记录当前自然数出现的次数,如果num[i]和j相同,c++;不同就输出j和c,然后j=num[i], c = 1。在循环结束后还要将最后一个自然数输出。
下[……]