HDOJ 1028 母函数分析】的更多相关文章

#include<iostream>#include<cstring>using namespace std;int main(){    int c1[10000],c2[10000];    int i,j,k;    int n;    while(cin>>n)    {        memset(c1,0,sizeof(c1));        memset(c2,0,sizeof(c2));        for(i=0;i<=n;i++) c1[i…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1028 思路分析:该问题要求求出某个整数能够被划分为多少个整数之和(如 4 = 2 + 2, 4 = 2 + 1 + 1),且划分的序列 2, 2 或者 2, 1, 1为单调非递增序列: 使用动态规划解法:假设dp[i][j]表示整数i被划分的序列中最大值不超过j的所有的可能,则使用类似于0-1背包的思考方法: (1)如果i == j,则dp[i][j] = dp[i][j-1] + 1: (2)如果…
///hdu 1028 母函数 一个数有几种相加方式 #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #define INF 1000000009 using namespace std; ; int c1[_max], c2[_max]; int main() { int n,i,j,k; while(cin>>n) { ;i<=n;i…
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9532    Accepted Submission(s): 6722 Problem Description "Well, it seems the first problem is too easy. I will let y…
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19589    Accepted Submission(s): 13709 Problem Description "Well, it seems the first problem is too easy. I will let…
Problem Description "Well, it seems the first problem is too easy. I will let you know how foolish you are later." feng5166 says. "The second problem is, given an positive integer N, we define an equation like this: N=a[1]+a[2]+a[3]+-+a[m];…
http://acm.hdu.edu.cn/showproblem.php?pid=1028 母函数: 例1:若有1克.2克.3克.4克的砝码各一 枚,能称出哪几种重量?各有几种可能方案? 如何解决这个问题呢?考虑构造母函数.如果用x的指数表示称出的重量,则:    1个1克的砝码可以用函数1+x表示,    1个2克的砝码可以用函数1+x2表示,    1个3克的砝码可以用函数1+x3表示,    1个4克的砝码可以用函数1+x4表示, (1+x)(1+x2)(1+x3)(1+x4)=(1+x…
题目链接:HDOJ - 5212 题目分析 首先的思路是,考虑每个数对最终答案的贡献. 那么我们就要求出:对于每个数,以它为 gcd 的数对有多少对. 显然,对于一个数 x ,以它为 gcd 的两个数一定都是 x 的倍数.如果 x 的倍数在数列中有 k 个,那么最多有 k^2 对数的 gcd 是 x . 同样显然的是,对于两个数,如果他们都是 x 的倍数,那么他们的 gcd 一定也是 x 的倍数. 所以,我们求出 x 的倍数在数列中有 k 个,然后就有 k^2 对数满足两个数都是 x 的倍数,这…
题目链接:HDOJ - 5208 题目分析 使用按位贪心的思想,即从高位向低位枚举,尽量使这一位的答案为 1 . 我们使用 DFS ,每次就是对于  [l1, r1] [l2, r2] x  进行处理,其中,x 是当前处理的最高位的权值,即 2^i . 如果 A 和 B 两人的区间的最高位都确定了,那就记录这一位的答案,直接处理下一位. 如果 A 可以取 0/1 ,而 B 已经确定了,那么 A 就一定要取与 B 相反的那个. 如果 A 和 B 都能取 0/1 ,那么我们就要分支进行 DFS ,一…
题目链接:BZOJ - 1028 题目分析 枚举听的是哪种牌,再枚举成对的是哪种牌,再贪心判断: 从1到n枚举每一种牌,如果这种牌的个数小于0,就返回不合法. 将这种牌的张数 % 3, 剩下的只能和 i + 1, i + 2 这两种牌构成顺,所以 Num[i + 1] -= Num[i]; Num[i + 2] -= Num[i]; 牌的种类要枚举到 n + 2,因为第 n - 1 和第 n 种牌可能会减掉 n + 1,n + 2 的牌. 代码 #include <iostream> #inc…