結果
問題 | No.385 カップ麺生活 |
ユーザー |
![]() |
提出日時 | 2017-01-28 10:01:13 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,106 bytes |
コンパイル時間 | 1,328 ms |
コンパイル使用メモリ | 110,648 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-10-04 22:54:07 |
合計ジャッジ時間 | 2,037 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 32 |
ソースコード
#ifdef __GNUC__#pragma GCC optimize ("O3")#pragma GCC target ("avx")#endif#define _USE_MATH_DEFINES#include <iostream>#include <iomanip>#include <stdio.h>#include <sstream>#include <algorithm>#include <cmath>#include <string>#include <cstring>#include <vector>#include <valarray>#include <array>#include <queue>#include <complex>#include <set>#include <map>#include <stack>#include <list>#include<cassert>//assert();#include <fstream>/////////#define REP(i, x, n) for(int i = x; i < n; i++)#define rep(i,n) REP(i,0,n)/////////typedef long long LL;typedef long double LD;typedef unsigned long long ULL;#define PII pair<int,int>/////////using namespace::std;// 最大公約数template<class T>inline T gcd(T a, T b){return b == 0 ? a : gcd(b, a % b);}// 最小公倍数template<class T>inline T lcm(T a, T b){return a * b / gcd(a, b);}////////////////////////////////vector<bool> bPrime;vector<int> prime;void makePrime(int N){bPrime = vector<bool>(N+1,true);bPrime[2] = true;prime.push_back( 2 );for(int i=3;i<=N;i+=2){if( bPrime[i] == true){prime.push_back( i );for(int j=i+i;j<=N;j+=i){bPrime[j] = false;}}}}inline void solve(){int M;//所持金int N;//種類cin >> M >> N;vector<int> C(N);for(int i=0;i<N;++i){cin >> C[i];}///makePrime(M);const int dpMax = 20*1000+1;vector<int> dp(dpMax,0);//同じ価格を複数個買えるdp[M] = 1;int kakaku;for(int kind=0;kind<N;++kind){kakaku = C[kind];for(int i=M;i>=0;--i ){if( dp[i] && i - kakaku >= 0){dp[i-kakaku] = max(dp[i-kakaku],dp[i] + 1);}}}int size = prime.size();ULL ans = 0;for(int i=0;i<size;++i){if( dp[ prime[i] ] ){ans += dp[ prime[i] ] -1;}}//最後使いきり。int maxE = *max_element(dp.begin(), dp.end());ans += maxE -1;cout << ans << endl;}int main(void){std::cin.tie(0);std::ios::sync_with_stdio(false);//std::cout << std::fixed;//小数を10進数表示//cout << setprecision(16);//小数をいっぱい表示する。16?solve();return 0;}