2017-11-30 21 views
0

여기에 새. 이 문제를 해결하기 위해 노력 중입니다 here. 자바를 사용하고 있는데 왜 대부분의 테스트 케이스에서 실패하는지 알지 못합니다. 여기 내 해결책은시리즈 생성 - K 피보나시 (자바)

public class Main{ 

    public static void main(String[] args) { 
     int k,n; 
     Scanner sc = new Scanner(System.in); 
     n = sc.nextInt(); 
     k = sc.nextInt(); 
     long ans; 
     long term[]=new long[n]; 
     for(int i=0;i<n;i++) 
     { 
     if(i<k) 
      term[i]=1; 
     else if(i==k) 
      term[i]=k; 
     else 
     { 
      term[i]=0; 
      for(int j=i-k;j<i;j++) 
       term[i]+=term[j]; 
     } 
     } 
     ans=term[n-1]%1000000007; 
     System.out.println(ans); 
    } 
} 

나는 4 가지 테스트 케이스를 통과하지만 다른 테스트는 실패한다. 나는 이유를 알 수없는 것 같습니다. 비슷한 해결책이 this입니다.

도움이 될 것입니다. 감사합니다 :)

+0

이 조건을 보관 유지하는데 충분한 크기가 길이가 모든 테스트 케이스를 통과

? –

+1

용어가 너무 길어서 길이가 길지 않은 좋은 기회가 있습니다. 따라서 링크 된 솔루션이 모든 용어를 1000000007 개까지 수정하는 이유는 무엇입니까? (a % b + c % b) % b == (a + c) % b') – njzk2

답변

0

가져 오기 java.util. *; 공용 클래스 홈페이지 {

public static void main(String[] args) { 
    int k,n; 
    Scanner sc = new Scanner(System.in); 
    n = sc.nextInt(); 
    k = sc.nextInt(); 
    long ans; 
    long term[]=new long[n]; 
    for(int i=0;i<n;i++) 
    { 
    if(i<k) 
     term[i]=1; 
    else if(i==k) 
     term[i]=k; 
    else 
    { 
     term[i]=0; 
     for(int j=i-k;j<i;j++){ 
      term[i]+=term[j]; 
      term[i]%=1000000007;  
      } 
    } 
    } 
    ans=term[n-1]%1000000007; 
    System.out.println(ans); 
} 

}이 근무하고 (njzk2 말했다 또한이 솔루션)

+0

Ohk. 고마워. – user8744540