Onigiri
package com.algo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
* Created by ibyeongmu on 2017. 3. 25..
*/
public class BJ_2291 {

static int N,M,K,dp[][][],result[];
static boolean check[][][];

public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader( new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
dp = new int[10+1][2020+1][220+1];
check = new boolean[10+1][2020+1][220+1];
result = new int [10+1];
// System.out.println(proc(N,M,K));
find(N,1,M,K);
StringBuilder sb = new StringBuilder();
for(int i =N;i>0;i--){
sb.append(result[i]).append(" ");
}
System.out.println(sb);



}
public static int proc(int idx,int n , int sum){
if(idx==1){
if(n<=sum) return 1;
else return 0;
}
if(idx==0)return 0;


if(check[idx][n][sum])return dp[idx][n][sum];


check[idx][n][sum]= true;


for(int i = n ;i<=220;i++) {
if(sum>=i)dp[idx][n][sum] += proc(idx - 1,i,sum-i);
}
return dp[idx][n][sum];
}
public static void find(int n,int num,int sum ,int k){
if(n==1){
result[n]=sum;
return;
}



int pivot =0;



pivot = proc(n - 1, num, sum - num);

if(k<=pivot ){
result[n]=num;
find(n-1,num,sum-num,k);
}else{
find(n,num+1,sum,k-pivot);
}

}

}


profile

Onigiri

@Onigiri

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!