#pragma GCC optimize ("O3") // 最適化レベルの変更 O0〜O3 などを指定 #pragma GCC target ("avx") // ターゲットの変更 sse4, avx, avx2 など #include int T[100000]; int dp[10000007]; const int inf = 100000000; #define min(a, b) ((a)>(b)?(b):(a)) int solve(int n) { int ti = 1; for (int t; (t = ti * (ti + 1) / 2) <= n; ti++) { T[ti-1] = t; } for (int i = 0; i < 10000007; i++) { dp[i] = inf; } int m = ti - 1; T[m] = inf; dp[0] = 0; for (int i = 1; i < n+1; i++) { // if (i % 1000000==0) printf("%d\n",i); for (int j = 0; i - T[j] >= 0; j++) { dp[i] = min(dp[i], dp[i-T[j]]); } dp[i]++; } return dp[n]; } int main() { int n; scanf("%d", &n); printf("%d", solve(n)); }