結果
| 問題 |
No.458 異なる素数の和
|
| コンテスト | |
| ユーザー |
mmn15277198
|
| 提出日時 | 2021-03-12 16:20:22 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 49 ms / 2,000 ms |
| コード長 | 1,009 bytes |
| コンパイル時間 | 1,672 ms |
| コンパイル使用メモリ | 171,244 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-14 02:40:12 |
| 合計ジャッジ時間 | 3,070 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i = 0; i < (n); i++)
typedef long long ll;
const int MOD = 1000000007;
const int INF = 1001001001;
vector<bool> prime(22222 , true);
void pre_calc() {
for (int i = 2; i < 22222; i++) {
for (int j = 2; j * i < 22222; j++) {
prime[i * j] = false;
}
}
return;
}
int main () {
int n;
cin >> n;
pre_calc();
vector<int> dp(n + 1 , 0);
//dp[n] = 1;
for (int i = 2; i <= n; i++) {
if (prime[i] == false)continue;
vector<int> dp2;
dp2 = dp;
for (int j = n; j >= 0; j--) {
//if (prime[j - i] == false) continue;
if(j - i >= 0 && (dp[j] > 0 || j == n)) dp2[j - i] = max(dp2[j - i] , dp[j] + 1);
}
dp = dp2;
}
int ans = dp[0];
if (dp[0] == 0) ans = -1;
cout << ans << endl;
/*
for (int i = 0; i <= n; i++) {
cout << i << " : " << dp[i] << endl;
}
*/
return 0;
}
mmn15277198