結果
問題 | No.636 硬貨の枚数2 |
ユーザー | TangentDay |
提出日時 | 2018-01-19 22:45:19 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 1,359 bytes |
コンパイル時間 | 638 ms |
コンパイル使用メモリ | 83,740 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-24 12:41:53 |
合計ジャッジ時間 | 2,300 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 65 |
ソースコード
#include <iostream> #include <fstream> #include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <string> #include <set> #include <map> #include <stack> #include <queue> #include <deque> #include <bitset> #include <algorithm> using namespace std; #define REP(i,n) for(int i=0; i<n; ++i) #define FOR(i,a,b) for(int i=a; i<=b; ++i) #define FORR(i,a,b) for (int i=a; i>=b; --i) #define ALL(c) (c).begin(), (c).end() typedef long long ll; typedef vector<int> VI; typedef vector<ll> VL; typedef vector<VL> VVL; typedef vector<VI> VVI; typedef pair<int,int> P; typedef pair<ll,ll> PL; const int N = 10010; const int INF = 1e9; int dp[N][2]; int cost(int x){ if (x < 5) return x; return x - 4; } int main() { string s; cin >> s; s = '0' + s; reverse(ALL(s)); int n = s.length(); REP(i,n+1) dp[i][0] = dp[i][1] = INF; dp[0][0] = 0; REP(i,n) REP(j,2){ int x = s[i] - '0'; REP(k,10){ int d = k - x - j; if (d >= 0){ dp[i+1][0] = min(dp[i+1][0], dp[i][j] + cost(k) + cost(d)); }else{ dp[i+1][1] = min(dp[i+1][1], dp[i][j] + cost(k) + cost((d + 10) % 10)); } } } // REP(i,n+1){ // cout << dp[i][0] << " " << dp[i][1] << endl; // } cout << dp[n][0] << endl; return 0; }