srm 620 div2

2499 단어 srm620
/**
 * User: Free
 * Date: 14-5-11
 * Time:   12:52
 */
public class PairGameEasy
{
  public  String able(int a, int b, int c, int d)
    {
        String Y = "Able to generate";
        String N = "Not able to generate";
        while(a!=c || b!=d){
            if(c<a || d<b){
                return  N;
            }
            if(c>d){
                c = c-d;
            }
            else if(d>c){
                d = d-c;
            }else{
                return N;
            }
        }
        if(a==c && b==d )        return Y;
        else return N;
    }
    public static void main(String args[]){
        PairGameEasy pairGameEasy = new PairGameEasy();
        System.out.println(pairGameEasy.able(1,2,3,8));
        System.out.println(pairGameEasy.able(1,2,2,1));
        System.out.println(pairGameEasy.able(2,2,2,999));

    }


}

 
topcoder 상 3 가지 해결
(1) 귀속
    public  String able(int a, int b, int c, int d)
    {
        String Y = "Able to generate";
        String N = "Not able to generate";
        {
        if(a>c || b>d)return N;
        if(able(a+b,b,c,d).equals(N))
            return able(a,a+b,c,d);
        else
            return Y;
    }

 
 
(2)DP
 
    public  String able(int a, int b, int c, int d)
    {
        String Y = "Able to generate";
        String N = "Not able to generate";
        int dp[][] =new int[2000][2000];
        dp[a][b]=1;
        for(int i=a;i<=c;i++){
                     

            for(int j=b;j<=d;j++) {
                   if(dp[i][j]==1){
                       dp[i+j][j]=1;
                       dp[i][i+j]=1;
                   }
            }
        }
        if(dp[c][d]==1){
            return Y;
        }
            
        return N;

    }

 
 
이 dp 방법 은 생각 이 좋 습 니 다. 비록 이 프로그램 에서 효율 이 낮 고 알고리즘 이 좋 지 않 지만 사상 이 좋 습 니 다.
 
(3) 저 는 생각 을 줄 이 는 것 을 사 용 했 습 니 다. 알고리즘 의 복잡 도가 가장 적 고 gcd 사고방식 으로 계 산 했 습 니 다.맨 앞 에 붙 인 거.

좋은 웹페이지 즐겨찾기