2014-10-16 2 views
0

나는 N 개의 원소와 그 무게를주고 있는데, 그 중 무게가 k로 나뉘도록 M 개의 원소 만 집어 야한다.요소를 그룹으로 나누기

For Ex: 
N=5 
Weight:1 2 3 4 5 
M =3 
K=5 
so we will pick up : 1 4 5 as total 10 is divide by 5. So ans =10 

내 방식 : 사용 재귀 함수

public static int ans(int[] a,int m,int k,int total){ 
     int sum=0; 
     if(a.length<m) 
     return Integer.MAX_VALUE; 
     if(m==0){ 
      //System.out.println("ok"); 
      if(total%k==0) 
       return total; 
      else 
       return Integer.MAX_VALUE; 
     } 
     int[] temp = new int[a.length-1]; 
     for(int j=0;j<temp.length;j++) 
      temp[j]=a[j]; 

     sum = Math.min(ans(temp,m,k,total), ans(temp,m-1,k,total+a[a.length-1])); 




     return sum; 
    } 

그러나이 방법은 내가 '돈 때문에 사람이 어떻게이에 동적 프로그래밍를 사용하는 나를 도울 수, 데이터의 매우 많은 양의 실패 반복적 인 전화를하지 마십시오.

+0

요구 사항이 분명하지 않습니다. 처음 세 요소 (가중치 1, 1 및 3)는 어떻게됩니까? 또한 5 가중치까지 추가합니다. 일반적으로 가능한 솔루션은 두 가지 이상입니다. 또한 솔루션이 없을 수도 있습니다. 귀하의 알고리즘은 무엇을 제공해야합니까? 나는 또한 단지 int를 반환한다는 것을 알 수 있습니다. 그게 어떻게 해결책일까요? – Seelenvirtuose

+0

@Seelenvirtuose [link] (http://www.codechef.com/problems/BUYING) – user4116864

+0

'mod K'의 나머지 값으로 입력 값을 그룹화하는 방법은 무엇입니까? – CiaPan

답변

0

각 요소가 결과에 포함되는지 여부를 나타내는 플래그 배열을 가져옵니다. 포함되지 않은 것으로 시작하여 각 요소를 포함 시키면 올바른 결과를 제공 할 수 있는지 여부를 재귀 적으로 시도하십시오.