結果
問題 |
No.458 異なる素数の和
|
ユーザー |
![]() |
提出日時 | 2019-08-06 17:44:36 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 192 ms / 2,000 ms |
コード長 | 884 bytes |
コンパイル時間 | 745 ms |
コンパイル使用メモリ | 74,556 KB |
実行使用メモリ | 180,096 KB |
最終ジャッジ日時 | 2024-07-18 14:09:40 |
合計ジャッジ時間 | 3,675 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
#include<iostream> #include<vector> #define FALSE -1 using namespace std; vector<int> n_list; void eratos(bool cp_list[],int max){ for(int i=2;i<=max;i++){ cp_list[i]=true; } cp_list[1]=false; for(int i=2;i<=max;i++){ if(cp_list[i]){ n_list.push_back(i); for(int j=i+i;j<=max;j+=i){ cp_list[j]=false; } } } } int main(){ int s=0,e=0,ans=-1,size,num=0,n; bool b[20001]; cin >> n; eratos(b,20000); size=n_list.size(); vector<vector<int>> dp(size,vector<int>(n+1,-1)); for(int i=0;i<size;i++){ dp[i][0]=0; } dp[0][n_list[0]]=1; for(int i=1;i<size;i++){ for(int j=0;j<=n;j++){ dp[i][j]=dp[i-1][j]; if(j-n_list[i]>=0&&dp[i-1][j-n_list[i]]!=FALSE){ dp[i][j]=max(dp[i][j],dp[i-1][j-n_list[i]]+1); } } } if(dp[size-1][n]==FALSE) cout <<"-1\n"; else cout << dp[size-1][n]<<endl; }