結果
問題 |
No.634 硬貨の枚数1
|
ユーザー |
![]() |
提出日時 | 2017-05-17 13:10:20 |
言語 | C (gcc 13.3.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 818 bytes |
コンパイル時間 | 517 ms |
コンパイル使用メモリ | 31,616 KB |
実行使用メモリ | 81,920 KB |
最終ジャッジ日時 | 2024-12-25 18:26:07 |
合計ジャッジ時間 | 134,663 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 34 TLE * 41 |
ソースコード
#pragma GCC optimize ("O3") // 最適化レベルの変更 O0〜O3 などを指定 #pragma GCC target ("avx") // ターゲットの変更 sse4, avx, avx2 など #include <stdio.h> 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)); }