hdu 1271 整数对】的更多相关文章

看了别人的解题报告a了, 大致思路就是 A=a+b*10^k+c*10^(k+1) B=a+c*10^k (在A中取出一位数后) N=A+B=2*a+b*10^k+11*c*10^k 这样就好做了,再就是注意进位可能影响b的值…… 链接http://acm.hdu.edu.cn/showproblem.php?pid=1271 #include<iostream>#include<stdio.h>#include<algorithm>#include<iomani…
假设删除第k位,把整数A表示成如下形式: A = a * 10^(k+1) + b * 10 ^k + c; 则: B = a * 10^k + c; N = A + B = (11*a+b)*10^k + 2*c; 显然: 11*a+b = N / (10^k) 2*c = N % (10^k) 但是c有可能产生进位,产生的影响为: 11*a+b+1 = N/(10^k)[b+1最多为10,不会影响到11*a的值] 2*c = N % (10^k) + 10^k; 把这两种情况分别考虑一下.…
Ignatius and the Princess III HDU - 1028 整数划分问题 假的dp(复杂度不对) #include<cstdio> #include<cstring> typedef long long LL; LL ans[][]; LL n,anss; LL get(LL x,LL y) { ) return ans[x][y]; ) ; ; ans[x][y]=; LL i; ;i<=y;i++) ans[x][y]+=get(x-y,i); re…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1028 整数划分,每个数可以用无限次: 所以构造 f(x) = (1+x+x2+x3+...)(1+x2+x4+...)(1+x3+x6+...)...(1+xn) 乘起来后的 xn 的系数就是方案数: 用两个数组做即可,从第一个括号开始一个一个乘,f[i] 表示此时 xi 项的系数,后面每乘过来一个括号,相当于多了一种转移,所以加上. 代码如下: #include<iostream> #include…
生成函数(母函数) 母函数又称生成函数.定义是给出序列:a0,a1,a2,...ak,...an, 那么函数G(x)=a0+a1*x+a2*x2+....+ak*xk +...+an* xn  称为序列a0,a1,a2,.......ak,......的母函数(即生成函数). 1. 问题 n=x1+x2+x3+...+xk有多少个非负整数解?这道题是学排列与组合的经典例题了. 把每组解的每个数都加1,就变成n+k=x1+x2+x3+...+xk的正整数解的个数了. 教材上或许会出现这么一个难听的…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5230 题意:给定n,c,l,r.求有多少种方法从1~n-1选取任意k数每个数的权重为其下标,使得这些数字之和加上c之后在l,r范围内. 题解:第一反应是计数01包,但是范围给定的n太大,TLE... 然后仔细想想,不就是求l~r范围内不重复的整数划分数嘛. dp[i][j]表示j这个数字,当前的拆分拥有i个拆分数时的方案数. 先考虑允许重复数字 : dp[i][j] = dp[i][j - i] + d…
我们用递归+记忆化的方法来解决普通整数划分问题:定义 f(n,m)为将整数n划分为一系列整数之和,其中加数 最大不超过m. 得到下面的递推关系式: 当n==1 || m==1 只有一种划分,即 1 或者 1+1+1......+1 当m>n 显然,等价于 f(n,n) 当m==n 此时:我考虑加数包含m与否的两种情况: 1)划分不包含m,即f(n,m-1)---所有m-1的划分 2)划分包含 m,此时只有一种即 m 所以当m==n时,有 f(n,m)=f(n,m-1)+1 当m<n时, 1)包…
#include"iostream"using namespace std;int main() { int n,i,j,k; int c[122],temp[122]; //c[] 数组用于储存当前多项式各项系数 //temp[]数组用于暂时储存在运算时的两多项式相加的系数和 while(cin>>n&&n!=0) { for(i=0;i<122;i++) //系数初始化,当前c[]所指的多项式是第一个多项式 {c[i]=1; temp[i]=0;}…
枚举,假设这个数x=a*10^(i+1)+b*10^i+c,去掉b后y=a*10^i+c,x+y=n,则x+y=n(mod10^i),求出c,注意c<10^i,但2*c有可能大于10^i,因此分类后,加一些限制条件枚举可得. #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 105 int buf[MAXN]; int comp(const void *a, const voi…
有1,4,9,16,25.....2^17这么多面值的硬币,问任意给定一个不大于300的正整数面额,用这些硬币来组成此面额总共有多少种组合种数 比如10全14 + 6个 14+4+1+19+1 求(1+x+x^2+x^3+x^4+x^5+x^6+x^7+x^8+x^9+x^10)(1+x^4+x^8)(1+x^9)中x^10的系数即可 只是把模板的 i<=n改成了i*i<=n,在k遍历指数时把k=k+i变成了k=k+i*i Sample Input210300 Sample Output142…