Description
Mary准备举办一个聚会,她准备邀请很多的人参加她的聚会。并且她准备给每位来宾准备一些金子作为礼物。为了不伤及每个人的脸面,每个人获得的金子必须相同。Mary将要用一个天平来称量出金子。她有很多的砝码,所有砝码的质量都是4的幂。Mary将金子置于左边并且将砝码置于右盘或者两个盘。她希望每次称量都使用最少的砝码。并且,他希望,每次都用不同的称量方法称出相同质量的金子。对于给定的质量n,Mary希望知道最少需要用多少个砝码可以完成称量,并且想知道用这么多个砝码一共有多少种方式进行称量。 Input
输入文件仅包含一个整数,表示Mary希望给每个人的金子的质量。(1<=n<=10^1000) Output
输出文件仅包含一个整数,表示一共可能的称量方式对10^9的模。 Sample Input 166
Sample Output 3
样例解释
一共有三种方式称量出166。166=64+64+16+16+4+1+1。166=256-64-16-16+4+1+1。166=256-64-16-4-4-1-1。
解题方法: 我们首先考虑把 n 转换成一个四进制数。我们记转换完的数有 m 位,第 i 位(从低到高)的值为 num[i]。我们发现对于第 i 位要想满足条件只有两种放置方法,第一种是在天平的右盘放 num[i]个 4 i 的砝码,第二种是在天平的右盘放 1 个 4 i+ 1 的砝码,在天平的左盘放 4-num[i]个 4 i的砝码。因此我们可以考虑用 DP 解决,定义状态 dp[i][j]表示第 i 到 m 位已经处理完,dp[i][0]表示第 i 位不多放一个在右盘,dp[i][1]表示在第 i 位多放一个在右盘,最少需要放置的砝码个数。则有:
新闻热点
疑难解答