白駿9095号(Java)


DPの数字を検索


DPを使って白駿9095号をJavaに解読します.
これは簡単なDP問題で、問題を見るとすぐに解決してしまうのですが、正直、もっと大量に加わるときにも一定の保証があるのかどうか迷っています.

まず提出してから、他のコードを見て、よく考えてみると、私たちが使える数字は1,2,3に固定されています.したがって、nを作成するには、以下の3つのケースのみを考慮すればよい.
  • n-3 + 3
  • n-2 + 2
  • n-1 + 1
  • この3つのケースだけが私たちが利用できるすべての表現方法であるため、以下の簡単な点火式を導出しました.dp[n] = dp[n-1] + dp[n-2] + dp[n-3]次は私が提出したコードです.
    import java.util.*;
    import java.io.*;
    
    public class boj9095 {
        static int T,n,dp[] = new int[11];
    
        static int DP(int n){
            if(dp[n]!=0)    return dp[n];
            else{
                for(int i=4; i<n+1; i++)
                    dp[i] = dp[i-1] + dp[i-2] + dp[i-3];
                return dp[n];
            }
        }
    
        public static void main(String args[]) throws IOException{
            BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer stk = new StringTokenizer(bfr.readLine());
            T = Integer.parseInt(stk.nextToken());
            dp[1] = 1; dp[2] = 2; dp[3] = 4;
            for(int i=0; i<T; i++){
                stk = new StringTokenizer(bfr.readLine());
                n = Integer.parseInt(stk.nextToken());
                System.out.println(DP(n));
            }
        }
    }