日々精進

aikoと旅行とプログラミング

【AOJ 1335】Equal Sum Sets

問題

Equal Sum Sets | Aizu Online Judge

ソースコード

#include <iostream>
#include <cstring>

using namespace std;

int dp[160][100][160];
int n, k, s;

int solve(int _n, int _k, int _s){
  int res=0;
  if(dp[_n][_k][_s] >= 0) return dp[_n][_k][_s];
  
  if(_k == k){
    if(_s==s) return 1;
  }

  if(_n > n || _k > k || _s > s) return 0;
  
  res += solve(_n+1, _k+1, _s+_n);
  res += solve(_n+1, _k, _s); 

  return dp[_n][_k][_s] = res;
}

int main(){
  while(cin >> n >> k >> s, n){
    memset(dp, -1, sizeof(dp));    
    cout << solve(1,0,0) << endl;
  }  
}