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; } } } }