結果

問題 No.385 カップ麺生活
ユーザー lmxyue
提出日時 2025-08-25 15:54:31
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 973 bytes
コンパイル時間 794 ms
コンパイル使用メモリ 88,992 KB
実行使用メモリ 7,716 KB
最終ジャッジ日時 2025-08-25 15:54:34
合計ジャッジ時間 2,174 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 32
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <cstring>
#include <cassert>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;

bool isp[10010];
int dp[10010];

int main(){
        int M;
        cin >> M;

        int N;
        cin >> N;

        vector<int> C(N);
        for(int i=0;i<N;i++)cin >> C[i];

        memset(dp, -1, sizeof(dp));
        dp[M] = 0;
        for(int i=M;i>=0;i--)if(dp[i] >= 0){
                for(int c : C)if(c <= i){
                        dp[i-c] = max(dp[i-c], dp[i] + 1);
                }
        }

        memset(isp, true, sizeof(isp));
        for(int p=2;p*p<=M;p++)if(isp[p]){
                for(int kp=p*p;kp<=M;kp+=p)isp[kp] = false;
        }

        int mn = *min_element(C.begin(), C.end());
        int res = M / mn;
        for(int p=2;p<=M;p++)if(isp[p] && dp[p] > 0){
                res += dp[p];
        }

        cout << res << endl;
        return 0;
}
0