程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [hdu-2045] 不容易系列之(3)—— LELE的RPG難題

[hdu-2045] 不容易系列之(3)—— LELE的RPG難題

編輯:C++入門知識

不容易系列之(3)—— LELE的RPG難題

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28032 Accepted Submission(s): 11192

Problem Description 人稱“AC女之殺手”的超級偶像LELE最近忽然玩起了深沉,這可急壞了眾多“Cole”(LELE的粉絲,即"可樂"),經過多方打探,某資深Cole終於知道了原因,原來,LELE最近研究起了著名的RPG難題:

有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.

以上就是著名的RPG難題.

如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在眾多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?


Input 輸入數據包含多個測試實例,每個測試實例占一行,由一個整數N組成,(0
Output 對於每個測試實例,請輸出全部的滿足要求的塗法,每個實例的輸出占一行。

Sample Input
1
2

Sample Output
3
6

分析:這是一個遞推問題

1、數組 nums [ n ] 保存 n 個格子有多少種塗法。

2、n 個格子的塗法可以由 n - 1 個格子的塗法再加 1 個格子得到。n - 1 個格子塗好後,再加 1 個格子就只能塗 1 種顏色,所以nums [ n ] = nums [ n - 1 ] * 1

3、由 n - 1 個格子遞推到 n 個格子的時候,會出現一個問題:原來 n - 1 個格子的首尾兩個格子不能同色,加 1 個格子後,原來的 n - 1 個格子的首尾兩個格子可以同色了!

4、在 n 個格子出現問題的基礎上,反推可知:n - 1 個格子首尾同色的時候,n - 2 個格子肯定合法!所以,n - 1 個格子首尾同色,再加 1 個格子就可以塗 2 種顏色,所以nums [ n ] = num [ n - 2 ] * 2

5、綜上所述:nums [ 1 ] = 3 ; nums [ 2 ] = 6 ; nums [ 3 ] = 6 ; nums [ n ] = nums [ n - 1 ] * 1 + nums [ n - 2 ] * 2

import java.util.Scanner;

public class Main {

	static long[] nums = new long[51];

	static {
		nums[1] = 3;
		nums[2] = nums[3] = 6;
		for (int i = 4; i < 51; i++) {
			nums[i] = nums[i - 1] + 2 * nums[i - 2];
		}
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		while (scanner.hasNext()) {
			int n = scanner.nextInt();

			System.out.println(nums[n]);
		}
	}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved