Problem 1224 : Starship Hakodate-maru

Problem A: Starship Hakodate-maru
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=1224

  • 問題概要

自然数の3乗で表せる数 と n(n-1)(n-2)/6(nは自然数)で表せる数 との合計で表せる数の中で、

あたえられた数字の中で最大のものはなに?

  • 解法

先にテーブルをつくっておく。
二重ループ。

  • ソース
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<sstream>

#define REP(i,b,n) for(int i=b;i<n;i++)
#define rep(i,n)   REP(i,0,n)
#define ALL(C)     (C).begin(),(C).end()
#define pb         push_back
#define mp         make_pair
#define vint       vector<int>
#define FOR(it,o)  for(__typeof((o).begin()) it=(o).begin(); it!=(o).end(); ++it)
#define lli	    long long int
#define ld	    long double

#define MAX 151220


using namespace std;


bool t[MAX];


main(){

  for(int i=0; i*i*i<MAX; i++){
    int n = i*i*i;
    t[n] = true;
    for(int j=1; n + j*(j+1)*(j+2)/6<MAX; j++){
      t[n + j*(j+1)*(j+2)/6] = true;
    }
  }

  int n;
  while(cin >> n){
    if(n == 0)break;
    for(int i=n; i>=0; i--){
      if(t[i]){
	cout << i << endl;
	break;
      }
    }
  }
}