SGU 106.Index of super-prime
时间限制:0.25s
空间限制:4M
题目大意:
在从下标1开始素数表里,下标为素数的素数,称为超级素数(Super-prime),给出一个n(n<=10000),求最少能用几个超级素数的和表示,并以降序输出这些超级素数。
Sample Input
6
Sample Output
2
3 3
{=============}
分析:
读入n以后,先将不大于n的Super-prime筛出,然后DP
简单点的直接用完全背包DP,
稍微优化一点,减少一半的循环次数的话
用 F[i]=max(f[i],f[j]+f[i-j]);
其它细节要动手做了才知道。
参考代码:
#include <iostream>
#include <cstring>
using namespace std;
int prime[11000], pd[11000], tol, sPrime[1000], sum;
int f[11000][3], n;
void init() {
for (int i = 2; i <= n; i++) {
if (!pd[i]) {
prime[++tol] = i;
for (int j = i + i; j <= n; j += i) pd[j] = 1;
}
}
for (int i = 2; i <= tol; i++)
if (!pd[i]) sPrime[++sum] = prime[i];
memset (pd, 0, sizeof pd);
for (int i = 1; i <= sum; i++)
pd[sPrime[i]] = 1;
}
void write (int x) {
if (f[x][0] == 1) cout << x << ' ';
else
write (f[x][2]), write (f[x][1]);
}
int main() {
cin >> n;
init();
for (int i = 3; i <= n; i++) {
if (pd[i]) f[i][0] = 1;
else {
for (int j = 3; j <= i / 2 + 1; j++){
if (f[j][0] && f[i - j][0] &&
(f[i][0] == 0 || f[i][0] > f[j][0] + f[i - j][0])){
f[i][0] = f[j][0] + f[i - j][0];
f[i][1] = j, f[i][2] = i - j;
}
}
}
}
cout << f[n][0] << endl;
if (f[n][0]) write (n);
return 0;
}
http://www.cnblogs.com/keam37/ keam所有 转载请注明出处
SGU 106.Index of super-prime的更多相关文章
- SGU 106 The equation
H - The equation Time Limit:250MS Memory Limit:4096KB 64bit IO Format:%I64d & %I64u Subm ...
- 扩展欧几里德 SGU 106
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=106 题意:求ax + by + c = 0在[x1, x2], [y1, y2 ...
- 素数 + 背包 - SGU 116. Index of super-prime
Index of super-prime Problem's Link Mean: 如果一个素数所在的位置还是素数,那么这个素数就是超级素数,比如3在第2位置,那么3就是超级素数. 现在给你一个数,求 ...
- SGU 106 The equation 扩展欧几里德
106. The equation time limit per test: 0.25 sec. memory limit per test: 4096 KB There is an equation ...
- The equation SGU - 106
题目链接:https://codeforces.com/problemsets/acmsguru/problem/99999/106 这个题是关于EXGCD特别好的一个题目.题目大意:有一个等式ax+ ...
- SGU 106 The equation 扩展欧几里得好题
扩展欧几里得的应用……见算法竞赛入门经典p.179 注意两点:1.解不等式的时候除负数变号 2.各种特殊情况的判断( a=0 && b=0 && c=0 ) ( a=0 ...
- The equation - SGU 106(扩展欧几里得)
题目大意:有一个二元一次方程,给出系数值和x与y的取值范围,求出来总共有多少对整数解. 分析:有以下几点情况. 1,系数a=0, b=0, 当c != 0的时候结果很明显是无解,当c=0的时候x,y可 ...
- SGU 106 The Equation 扩展欧几里得应用
Sol:线性不定方程+不等式求解 证明的去搜下别人的证明就好了...数学题. #include <algorithm> #include <cstdio> #include & ...
- sgu 116 Index of super-prime
题意:用最少的super-prime组成n; 找出所有的super-prime数,只有202个.用完全背包记录能取到n值的最少数量.再找出7要哪些元素. #include <iostream&g ...
随机推荐
- 【转】iOS 开发怎么入门?
原文网址:http://www.zhihu.com/question/20264108 iOS 开发怎么入门? 请问有设计模式.内存管理方面的资料吗?最好有除了官方文档之外的其它内容,10 条评论 分 ...
- [Exchange2013] 无法正常发送存入草稿箱 或者 只能发不能收
可能是由于你的域控的DNS设置导致: 1.那么首先我们添加一个EX的记录在域控的DNS里面 2.登录exchange的控制台,设置DNS Server
- HDOJ1518Square 深搜
Square Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- BZOJ1015 [JSOI2008]星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 3895 Solved: 1750[Submit ...
- n皇后问题leetcode-51. N-Queens
n皇后问题是应用回溯法的经典问题.任一行.列.对角线不能有两皇后并存,因此在判断是否合法时,可以将某一行是否有皇后.某一列是否有皇后分别用数组存起来.注意到,对于往左下右上的对角线,每个点的行号(i) ...
- DocumentBuilder setEntityResolver() Method
Description The Javax.xml.parsers.DocumentBuilder.setEntityResolver(EntityResolver er) method specif ...
- win8.1 无法安装 net framework3.5的解决办法
近期给重装系统时,发现Windows8.1无法安装.net framework 3.5,即使我离线下载了安装文件,还要求安装2.0和3.0....而且无法从Windows更新中获取,因此百度到以下方案 ...
- kafka配额控制
转载请注明地址http://www.cnblogs.com/dongxiao-yang/p/5217754.html Starting in 0.9, the Kafka cluster has th ...
- 【转】eclipse插件:OpenExplorer快速打开文件目录
在MyEclipse开发中常用到其中一个"Open In Explorer"的小插件,可以直接进入Windows资源管理器中打开选中文件所在的目录,在使用eclipse开发时也很需 ...
- 在Windows上安装私有GitHub的开源替代-GitLab
在我之前的一篇博客中介绍过GitLab: 开源免费的git管理工具,今天说一下怎么在windows安装GitLab. BitNami可以很容易的帮助你安装开源应用,和Helicon Zoo类似,我之前 ...