AOJ1209 Square Coins

問題リンク Square Coins

  • 概要

1, 4, 9, ..., 289(=17^2) の価値のお金がある。これらの硬貨を使ってN円を払う方法は何通りあるかを答えよ。
N < 300

  • 解法

DPです。
dp[i][j]: i^2までの硬貨を使ってj円を表せる組み合わせ数
の表を作るだけです。

  • ソース
import java.util.Scanner;

//Square Coins
public class AOJ1209 {

	void run(){
		Scanner sc = new Scanner(System.in);
		int[][] dp = new int[18][300];
		dp[0][0]=1;
		for(int i=1;i<18;i++){
			int x = i*i;
			for(int j=0;j<300;j++){
				if(j-x>=0)dp[i][j]=dp[i][j-x];
				dp[i][j] += dp[i-1][j];
			}
		}
		while(true){
			int n = sc.nextInt();
			if(n==0)break;
			System.out.println(dp[17][n]);
		}
	}

	public static void main(String[] args) {
		new AOJ1209().run();
	}
}