int devide(int n, int m)

178 {

179         int i,j,k,l,N;

180

181         int **vector;

182         int P=pow(m,n-m);

183         vector = (int **)malloc(sizeof(int*)*P);

184            for (i=0; i<P; ++i)

185                 vector[i] = (int *)malloc(sizeof(int)*m);

186                         for (i=0;i<P;++i)

187                                 for(k=0;k<m;++k)

188                                 vector[i][k] = 0;        <<<< m의 n-m승 개 만큼의 벡터 만들어주고

189

190                         if (n<m)

191                                 return 0;

192

193

194

195

196                         else if (n==m)

197                         {

198

199

200                                 for(k=0;k<m;++k)

201                                 vector[0][k] = 1;

202

203                         N=1;

204                         }

205

206                         else{                                       <<< n=m일때 1씩 공평하게 분배하는거에서 시작해서 n을 1씩 늘려간다.

207                                 for(k=0;k<m;++k)

208                                 vector[0][k] = 1;

209

210                         for(N=1,l=m;l<n ;++l ){

211

212                                 for(j=N-1; j>=0; --j)

213                                         for(k=0; k<m; ++k)

214                                                 for(i=0;i<m;++i)

215                                                 vector[m*j+k][i]=vector[j][i];

216                                 for(j=0; j<N; ++j)

217                                         for(k=0;k<m;++k)

218                                                 vector[m*j+k][k]=vector[m*j+k][k]+1;

219                                 remove_overlap(P,m,vector);             <<< (1,1,1)이 n이 1 커지면서 (2,1,1),(1,2,1),(1,1,2)처럼 값이 겹치게 됐을때 중복값들을 제거 

220                                 N=remove_overlap_cnt(P,m,vector);     <<< 중복값 제거하고 개수 세주는 함수.

221

222                                 }

223

224

225                         }

226         

227                

228                         

229

230                 231         return N;

232

233                         }





viewimage.php?id=3dafdf21f7d335ab67b1d1&no=29bcc427bd8177a16fb3dab004c86b6f9d6f040c009803c815b32650036df473613d3de711ac99d855e0f99362b120ea6047157652a7cfe175da2f3447


값은 정확히 나오는데 

너무 복잡하다;; 입력값 크게 넣으면 돌아가지도 않고.
분할 문제 간단하게 코딩하는 방법 엄슬까.