UVA 10254 The Priest Mathematician
生活随笔
收集整理的這篇文章主要介紹了
UVA 10254 The Priest Mathematician
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
UVA_10254
??? 如果我們設f[i]為4個柱子時把i個東東從一個柱子移到另一個柱子所用的最少步驟,設g[i]為3個柱子時對應的值,我們可以得到f[n]=min{2*f[k]+g[n-k]},其中g[i]是已知的為2^i-1。
??? 然后接著就搞不下去了,看了別人報告說要找規律,o(╯□╰)o。有了上面的式子之后,我們打印前60個解還是很好打印的,同時把f[i]-f[i-1]也打印出來,這時會發現f[i]-f[i-1]都是2的某次方,而且2的k次方一共連續出現了k+1次,于是我們就可以以這個特征為依據預處理出所有解了。
import java.math.BigInteger;import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
BigInteger[] f = new BigInteger[10010];
f[0] = new BigInteger("0");
int k = 1, cnt = 0;
BigInteger d = new BigInteger("1");
for(int i = 1; i <= 10000; i ++)
{
f[i] = f[i - 1].add(d);
cnt ++;
if(cnt == k)
{
cnt = 0;
k ++;
d = d.multiply(BigInteger.valueOf(2));
}
}
while(cin.hasNext())
{
int n = cin.nextInt();
System.out.println(f[n]);
}
}
}
總結
以上是生活随笔為你收集整理的UVA 10254 The Priest Mathematician的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: talent-validate-all.
- 下一篇: symantec antivirus