結果
問題 |
No.634 硬貨の枚数1
|
ユーザー |
|
提出日時 | 2019-10-09 11:43:26 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,327 bytes |
コンパイル時間 | 1,433 ms |
コンパイル使用メモリ | 165,224 KB |
実行使用メモリ | 178,304 KB |
最終ジャッジ日時 | 2024-11-15 21:04:44 |
合計ジャッジ時間 | 8,495 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 WA * 58 |
ソースコード
#include "bits/stdc++.h" using namespace std; typedef long long int ll; int main(){ ll N; cin >> N; //vector<ll > ans(n, 0); ll t_value = 0; ll num = 1; ll mx = pow(10,7); vector<ll > value; while(t_value <= N){ t_value = num * (num + 1) / 2; num++; if(t_value <= N) { //cout << num << " " << t_value << endl; value.push_back(t_value); } } reverse(value.begin(), value.end()); vector<vector<ll > > dp(5000, vector<ll >(value.size(), 0)); dp[1][0] = value[0]; for(ll i = 1; i < 5000; i++){ //cout << i << endl; for(ll j = 0; j < value.size(); j++){ //cout << j << endl; if(dp[i][j] == 0) continue; if(dp[i][j] == N){ cout << i << endl; return 0; } for(ll k = 0; k < value.size(); k++){ if(dp[i][j] + value[k] > N){ //cout << dp[i][j] << endl; continue; } if(dp[i][j] + value[k] == N){ cout << i + 1 << endl; return 0; } //cout << value[k] << endl; dp[i + 1][k] = dp[i][j] + value[k]; } } } }