HDU-2189来生一起走】的更多相关文章

题意: 有N个志愿者.指挥部需要将他们分成若干组,但要求每个组的人数必须为素数.问不同的方案总共有多少.(N个志愿者无差别,即每个组的惟一标识是:人数) 思路: 假设N个人可分为K组,将这K组的人数从小到大排序,num1,...,numk. 故N个人分组的方案数dp[n]=sum(dp[numk]) (所有分为K组的不同方案的和) 代码: bool yes[155]; int prime[155]; int dp[155]; int main(){ mem(yes,true); int C =…
悼念512汶川大地震遇难同胞——来生一起走 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1939    Accepted Submission(s): 972 Problem Description 妈妈你别哭泪光照亮不了我们的路让我们自己慢慢的走 妈妈我会记住你和爸爸的模样记住我们的约定来生一起走 上面这首诗节选自一位诗人纪念遇难同…
悼念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 妈妈 你别哭 泪光照亮不了 我们的路 让我们自己 慢慢的走 妈妈 我会记住你和爸爸的模样 记住我们的约定 来生一起走 上面这首诗节选…
这题跟上两题也差不多. 把150以内的素数找出来,把素数的值看做硬币的面值,每个硬币的个数即ceil(150/prime[i]),因为再多也没用,最多组成n=150就行了,所以又回到了找硬币问题.用生成函数解之. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std…
题目 这道题用了,埃式筛选法和背包,我自己没有做出来,看了别人的代码,我也做不出来,特别是c[j]+=c[j-b[i]];弄了好久都没有弄懂. 这道题的解题思路:主要是先把150以内的所有素数找出来,存到一个数组里面,然后再用背包问题解决. #include<stdio.h> #include<string.h> int a[151]={0},b[151],c[151]; //数组a存储数字的因子和,数组b存储素数,数组c存储每个数的分法 int main() { memset(c…
#include <iostream> #include <algorithm> #include <cstring> using namespace std; ]; ]; ]; ]; int l; void init() { int i,j; num[]=; num[]=; ; i<=; i++) ; j+=i) num[j]=; ; i<=; i++) if(!num[i]) prime[l++]=i; //素数表.. } int main() { in…
题意:非常清楚不解释. 策略:如题. 就是个简单的母函数的改变. 这道题做了好久,才明确是那有毛病,还是理解的不够深刻. 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…
意甲冠军:没有解释的很清楚. 策略:如果, 这是改变一个简单的生成函数. 这道题做了好久,才明确是那有毛病.还是理解的不够深刻. 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,…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2189 本题的数学模型如下: 分解的问题,常用母函数求解,这里要求每个"硬币"的价值必须为素数,所以需要写一个函数判断一个数是否位素数. 然后再套用母函数模板: http://blog.csdn.net/ten_sory/article/details/59483762 C++代码如下: #include<iostream> using namespace std; int IsPr…
//hdu2189   题意大概就是给n个人,分成多组,要求每组人数都是素数,求有多少种... 解法就是先把150以内的素数全部存入一个数组,然后利用a[j+b[i]]+=a[j];这道题一开始没理解这步 后面把i做完一次循环的结果输出,然后对比下i全部做完循环的结果,原来这个也是隐藏的递归,解法真心想不出来... #include <iostream> #include <cstring> using namespace std; bool prime(int m) { for(…