HDU2709Sumsets整数分解为加数,递推公式
来源:互联网 发布:淘宝节点处罚考试答案 编辑:程序博客网 时间:2024/05/22 12:15
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2709
Sumsets
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2830 Accepted Submission(s): 1134
Problem Description
Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows use only numbers that are an integer power of 2. Here are the possible sets of numbers that sum to 7:
1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
Help FJ count all possible representations for a given integer N (1 <= N <= 1,000,000).
1) 1+1+1+1+1+1+1
2) 1+1+1+1+1+2
3) 1+1+1+2+2
4) 1+1+1+4
5) 1+2+2+2
6) 1+2+4
Help FJ count all possible representations for a given integer N (1 <= N <= 1,000,000).
Input
A single line with a single integer, N.
Output
The number of ways to represent N as the indicated sum. Due to the potential huge size of this number, print only last 9 digits (in base 10 representation).
Sample Input
7
Sample Output
6
题解:这个题当数据量不大的时候,完全可以用搜索得出结果,但数据量大时,会超时。所以,可以先用dfs搜索得出前面若干项的结果,看一下有什么规律。
这个题从1开始,结果一次为 1 2 2 4 4 6 6 10 10 14 14 20 20 26 26 36 36 46 46 60 60 74。
递推公式:p[ i ]=(p[ i-1 ]+p[ i/2 ]) % mod ; (mod=1e9)
AC代码:
#include<stdio.h>typedef long long ll;ll mod=1000000000;ll p[1020000];void init(){ p[1]=1;p[2]=2; for(int i=2;i<1000010;i+=2) { p[i]=(p[i-1]+p[i/2])%mod; p[i+1]=p[i]; }}int main(){ int n; init(); while(~scanf("%d",&n)) { printf("%lld\n",p[n]); } return 0;}
dfs搜索过程:(非AC代码)
#include<stdio.h> int pow2[100]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096};int ans;void dfs(int n,int last){ if(n==0) { ans++; return; } for(int i=0;n-pow2[i]>=0;i++) { if(pow2[i]>=last) dfs(n-pow2[i],pow2[i]); }}int main(){ int n; //while(~scanf("%d",&n)) for(n=1;n<40;n++) { ans=0; dfs(n,0); printf(" %d",ans); } return 0;}
阅读全文
0 0
- HDU2709Sumsets整数分解为加数,递推公式
- [递推] 51Nod1383 整数分解为2的幂
- 整数分解成不同加数的最大乘积
- 51nod 1383&1048 整数分解为2的幂 [递推]【数学】
- 51nod 1383 整数分解为2的幂【递推】
- 51nod 1383 整数分解为2的幂(递推)
- 和的加数分解
- HDU-4477滚动数组+递推(整数分解)
- hdu2709Sumsets
- uva1635(唯一分解定理,杨辉三角二项式递推公式)
- hdu2047-递推公式
- 递推公式小结
- 方差递推公式
- 求整数m的最大加数为n的组合问题
- 无线OSS-高精度整数加法(加数可以为负数,应实现高精度加减法)
- 整数分解为质数的乘积
- 一个整数分解为连续正整数之和
- 将整数分解为连续自然数之和
- 电商后台系统:管理后台篇之库存管理
- 【Linux】七个运行级别
- pandas&pandas学习教程&DataFrame与Series数据结构
- mac电脑安装wxPython2.8.12.1不成功怎么办,报错:Could not find a version that satisfies the requirement 2.8.12.1 (f
- 浏览器禁用cookie后php如何保持session会话-use_trans_sid机制
- HDU2709Sumsets整数分解为加数,递推公式
- 直接插入排序
- Akka(5): ConsistentHashing Router
- Unty5.x里Assetbundle的自动标记和打包
- 使用对象:GPS信号处理
- matlab中几个取整语句的区别
- PHP之浅谈cookie和session
- statusbar toolbar color
- C++中栈区 堆区 常量区