JAva:ダイナミックプランニング-階段問題
9096 ワード
JAva:段差問題
タイトルは、数ヶ月前に放映されたナンバーワンプレイヤーが火をつけることができなくなったことを描き、究極のAIを探求する研究者として、月神は自然にこの神劇を見に行った.興奮しすぎて、夜月神は奇妙な夢を見て、月神は自分が魔法をかけられた淵に落ちた夢を見て、月神はこの淵に登りたいと思っています.
深渊にはN层の阶段构成(1<=N<=1000)が知られており、月の神様は毎回2の整数次べき乗の阶段(1、2、4、...)を登ることができます.月の神様に、深渊から這い出す方法はいくつあるか教えてください.入力はM行です.(1<=M<=1000)
最初の行は、テストデータのセット数Mを入力します.
続いてM行があり、各行にNを入力して深淵を表す階段数出力記述:出力可能な深淵を這い出す方式例1入力:4 1 2 3 4出力:1 2 3 6解題構想:動的計画の思想、コイン交換問題との構想の差は多くないが、コイン交換問題の組み合わせは順序を考慮しないが、階段ジャンプ問題は階段を跳ぶ前後順序を考慮する必要がある.組合せを考慮する順序javaコードは以下の通りです.
タイトルは、数ヶ月前に放映されたナンバーワンプレイヤーが火をつけることができなくなったことを描き、究極のAIを探求する研究者として、月神は自然にこの神劇を見に行った.興奮しすぎて、夜月神は奇妙な夢を見て、月神は自分が魔法をかけられた淵に落ちた夢を見て、月神はこの淵に登りたいと思っています.
深渊にはN层の阶段构成(1<=N<=1000)が知られており、月の神様は毎回2の整数次べき乗の阶段(1、2、4、...)を登ることができます.月の神様に、深渊から這い出す方法はいくつあるか教えてください.入力はM行です.(1<=M<=1000)
最初の行は、テストデータのセット数Mを入力します.
続いてM行があり、各行にNを入力して深淵を表す階段数出力記述:出力可能な深淵を這い出す方式例1入力:4 1 2 3 4出力:1 2 3 6解題構想:動的計画の思想、コイン交換問題との構想の差は多くないが、コイン交換問題の組み合わせは順序を考慮しないが、階段ジャンプ問題は階段を跳ぶ前後順序を考慮する必要がある.組合せを考慮する順序javaコードは以下の通りです.
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] w=new int[n];
int[] step={1,2,4,8,16,32,64,128,256,512};
int[] res=new int[n];
for(int i=0;i<n;i++){
w[i]=in.nextInt();
res[i]=result(w[i],step,step.length);
}
for(int i:res) System.out.println(i);
}
public static int result(int k,int[] step,int n){
int[] dp=new int[k+1];
dp[0]=1;
// for(int i=0;i
// for(int j=step[i];j<=k;j++){
// dp[j]=dp[j]+dp[j-step[i]];
// }
// }
for (int i = 1; i <= k; ++i) {
for (int j = 0; j < step.length && i >= step[j]; ++j) {
dp[i] += dp[i - step[j]];
dp[i] %= 1000000003L;
}
}
return dp[k];
}
}