HDU2189 悼念512汶川大地震遇难同胞——来生一起走 【母函数】

悼念512汶川大地震遇难同胞——来生一起走

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2328    Accepted Submission(s): 1157

Problem Description

妈妈

你别哭

泪光照亮不了

我们的路

让我们自己

慢慢的走

妈妈

我会记住你和爸爸的模样

记住我们的约定

来生一起走

上面这首诗节选自一位诗人纪念遇难同胞的作品。并没有华丽的语言,可是每位读者都应该能感受到作品传达的浓浓爱意,或许还有丝丝无奈。

确实,太多的关于孩子不幸的报道冲击着我们每一颗柔弱的心。

正如温家宝总理所说“多难兴邦”,这场灾难让我们非常多80后的年轻人一下子成熟了起来,当中非常多人以自愿者的身份走上了抗震救灾的第一线。

今天,灾区又来了n位志愿者。抗震救灾指挥部须要将他们分为若干个小组,小组的数量不限,可是要求每一个小组的人数必须为素数,请问我们有几种分组的方法呢?

特别说明:

1、能够仅仅有一个组;

2、分组的方法仅仅和人数有关,而与详细的人员无关,即:你能够如果人是无差别的。

Input

输入数据首先包括一个正整数C,表示有C组測试用例。然后是C行数据,每行包括一个正整数n(2<=n<=150)。表示志愿者的总人数。

Output

对于每组測试数据,请输出分组的方案数目。每一个输出占一行。

Sample Input

3
3
4
5

Sample Output

1
1
2
#include <stdio.h>
#include <string.h>
#include <math.h>
#define maxn 160

int c1[maxn], c2[maxn], prime[maxn];

bool isPrime(int n)
{
	int t = sqrt(n);
	for(int i = 2; i <= t; ++i)
		if(n % i == 0) return 0;
	return 1;
}

int main()
{
	int i, id = 0, j, k, t, n;
	for(i = 2; i < 156; ++i)
		if(isPrime(i)) prime[id++] = i;
	for(i = 0; i < maxn; i += 2)
		c1[i] = 1;
	for(i = 1; prime[i] <= 150; ++i){
		for(j = 0; j <= 150; ++j)
			for(k = 0; k + j <= 150; k += prime[i])
				c2[j+k] += c1[j];
		for(j = 0; j <= 150; ++j){
			c1[j] = c2[j]; c2[j] = 0;
		}
	}
	scanf("%d", &t);
	while(t--){
		scanf("%d", &n);
		printf("%d\n", c1[n]);
	}
	return 0;
}
时间: 2024-08-11 17:00:42

HDU2189 悼念512汶川大地震遇难同胞——来生一起走 【母函数】的相关文章

HDU 2189 悼念512汶川大地震遇难同胞——来生一起走(母函数或完全背包)

悼念512汶川大地震遇难同胞--来生一起走 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3773    Accepted Submission(s): 1913 Problem Description 妈妈你别哭泪光照亮不了我们的路让我们自己慢慢的走 妈妈我会记住你和爸爸的模样记住我们的约定来生一起走 上面这首诗节选自一位诗人纪念遇难

HDU 2189 悼念512汶川大地震遇难同胞――来生一起走 --生成函数

这题跟上两题也差不多. 把150以内的素数找出来,把素数的值看做硬币的面值,每个硬币的个数即ceil(150/prime[i]),因为再多也没用,最多组成n=150就行了,所以又回到了找硬币问题.用生成函数解之. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std

HDOJ 2189 悼念512汶川大地震遇难同胞——来生一起走 【母函数】

题意:很清楚不解释. 策略:如题, 就是个简单的母函数的改变. 这道题做了好久,才明白是那有毛病,还是理解的不够深刻. AC代码: #include<stdio.h> #include<string.h> int c1[155], c2[155]; int pri[150] = {3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103,

HDU 2189 ( 悼念512汶川大地震遇难同胞——来生一起走 )

?? 悼念512汶川大地震遇难同胞--来生一起走 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2695    Accepted Submission(s): 1335 Problem Description 妈妈 你别哭 泪光照亮不了 我们的路 让我们自己 慢慢的走 妈妈 我会记住你和爸爸的模样 记住我们的约定 来生一起走 上面这首

hdoj 2187 悼念512汶川大地震遇难同胞——老人是真饿了

悼念512汶川大地震遇难同胞--老人是真饿了 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10074    Accepted Submission(s): 4206 Problem Description 时间:2008年5月16日(震后第4天) 地点:汶川县牛脑寨 人物:羌族老奶奶 [转载整理]牛脑寨是一个全村600多人的羌族寨子

HDU2188 悼念512汶川大地震遇难同胞——选拔志愿者

悼念512汶川大地震遇难同胞--选拔志愿者 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5442    Accepted Submission(s): 3403 Problem Description 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护

hdoj 2188 悼念512汶川大地震遇难同胞——选拔志愿者 【巴什博弈】

题意:... 策略:最简单的典型的巴什博弈. 代码: #include<stdio.h> int main() { int n, m; int t; scanf("%d", &t); while(t --){ scanf("%d%d", &n, &m); if(n%(m+1) == 0){ printf("Rabbit\n"); } else printf("Grass\n"); } } 题

hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

悼念512汶川大地震遇难同胞--珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14086    Accepted Submission(s): 5921 Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,

hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (这个只是题目名字) (多重背包)

本文出自:http://blog.csdn.net/svitter 原题:http://acm.hdu.edu.cn/showproblem.php?pid=2191 题意:多重背包问题.转换成为01背包解.多重背包转化为01背包的关键在于把件数从整体中孤立出来作为一个新的个体,也就是说不管分类,有多少件就有多少种. AC代码: //============================================================================ // Na