結果

問題 No.1231 Make a Multiple of Ten
コンテスト
ユーザー yuunegi
提出日時 2026-01-30 00:31:42
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
結果
AC  
実行時間 79 ms / 2,000 ms
コード長 854 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,285 ms
コンパイル使用メモリ 336,020 KB
実行使用メモリ 7,976 KB
最終ジャッジ日時 2026-01-30 00:31:47
合計ジャッジ時間 5,521 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
int main(void){
    int n,sum=0;
    cin>>n;
    int a[10]={};
    for(int i=0;i<n;i++){
        int b;
        cin>>b;
        a[b%10]++;
        sum+=b%10;
    }
    sum%=10;
    int dp[101];
    for(int i=0;i<101;i++){
        dp[i]=n;
    }
    dp[0]=0;
    for(int i=1;i<10;i++){
        int nx[101];
        for(int j=0;j<101;j++){
            nx[j]=n;
        }
        for(int j=1;j<=a[i]&&j*i<100;j++){
            for(int k=0;k+j*i<101;k++){
                nx[k+j*i]=min(nx[k+j*i],dp[k]+j);
            }
        }
        for(int j=0;j<101;j++){
            dp[j]=min(dp[j],nx[j]);
        }
    }
    int ans=1000;
    // for(int i=0;i<101;i++){
    //     cout<<i<<" "<<dp[i]<<endl;
    // }
    for(;sum<101;sum+=10){
        ans=min(ans,dp[sum]);
    }
    cout<<n-ans<<endl;
    return 0;
}
0