摘要:
UVA_993首先我们考虑,什么情况下会是-1?显然是当x不能分解成10以内素数乘积的时候,那么我们直接把x分解素数然后依次输出就可以了吗?也不行。至于为什么不行,我们不妨想一下怎么保证最后的数最小。首先,要数最小,肯定是先输出小的数字再输出大的,其次,我们也要保证数字的个数尽可能少,而且我们要优先去保证这一点。想到这里,我们不妨看一下10以内的数:2、3、4、5、6、7、8、9,其中8可以兼并3个2,于是我们先要看x包含几个8,其次,4、6、9都能兼并两个数,而且他们最大能兼并的数字之和是一定的,不会因兼并策略的改变而改变,但是为了保证小的数字更多,我们便要先考虑4,再考虑6,最后考虑9。剩 阅读全文
摘要:
UVA_10706首先我们可以把这串数中的通项摘出来,就是12345……(n-1)n,这串数就是由这个通项依次拼接而成的。意识到上面一点后,我们不妨把原序列的第i位转化成是哪一通项中的哪一位,这样我们不就好处理多了么。要能够实现这样的转化,我们需要知道两组数据,第一,每个通项中有多少个数字,第二,根据第一组数据算出从第一项开始至第n项一共有多数字。这样我们就可以算出第i位是在第n+1项中的i-sum[n]项,其中sum[]代表的就是第二组数据。在算这两组数据的时候我们采用递推的方式去计算,而且我们只要把最大的情况算出来并保留中间结果即可(也即打表),这样就避免了重复计算。下面的问题就是最大情况 阅读全文