摘要:
UVA_10604 一开始看错题了,以为化学物质最多会有10个,所以定义不了10维的去跑,便用了类似状态压缩的方式,把化学物质的状态压缩成一个整数,然后用哈希表建立一个索引,再用记忆化搜素去处理就可以了。 之所以能这么做,关键在于总状态并不是很多,我们可以粗略的估算一下,即便有10种药品时,状态最多有(10^10)/10!,考虑到混合之后达到的状态,最多再乘个10而已,用计算器算一下,数值还是比较小的。 当然这个题目可以用6维的数组去跑,但如果药品数多了之后n维的f显然空间是开不下的,但总状态数却不是很多,所以哈希表虽然写着复杂,但多少有些适用范围的优势。 此外,要注意到这个题目A和B混... 阅读全文
摘要:
UVA_607 我们可以首先预处理出来一节课可以连着上哪些topic,并且这节课的满意度是多少。 之后用两个数组f[i]、s[i],分别表示一直上到以课程i为结尾的课时的总满意度以及上过的总课时数,动规的过程就像是跳房子,看当前位置可以跳到那个位置,就尝试去更新那个位置。#include<stdio.h>#include<string.h>#define MAXN 1010#define MAXL 510#define INF 0x3f3f3f3fint N, L, C, f[MAXN], t[MAXN], p[MAXN][MAXN], s[MAXN];int init 阅读全文