結果
問題 |
No.458 異なる素数の和
|
ユーザー |
![]() |
提出日時 | 2016-12-29 15:48:22 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 791 bytes |
コンパイル時間 | 791 ms |
コンパイル使用メモリ | 74,036 KB |
実行使用メモリ | 6,816 KB |
最終ジャッジ日時 | 2024-12-15 07:43:09 |
合計ジャッジ時間 | 1,847 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 WA * 1 |
other | AC * 27 WA * 1 |
ソースコード
#include <vector> #include <iostream> std::vector<int> sieve(int n) { std::vector<bool> nums(n + 1, true); std::vector<int> primes; for (int i = 2; i *i < n; i++) { if (nums[i]) { for (int j = 2; i*j < n; j++) { nums[i*j] = false; } } } for (int i = 2; i < nums.size(); i++) { if (nums[i]) { primes.push_back(i); } } return primes; } int main(void) { int n; std::cin >> n; std::vector<int> primes = sieve(n); std::vector<int> dp(n + 1, 0); for (auto p: primes) { for (int i = n; i >= p+2; i--) { int ref = i - p; if (dp[ref] && dp[ref] >= dp[i]) { dp[i ] = dp[ref] + 1; } } if (!dp[p]) { dp[p] = 1; } } if (dp[n]) { std::cout << dp[n] << std::endl; } else { std::cout << -1 << std::endl; } return 0; }