【DP】poj2229_Sumsets_201408041139
来源:互联网 发布:电视如何解除网络禁用 编辑:程序博客网 时间:2024/05/29 09:29
Sumsets
Time Limit: 2000MS Memory Limit: 200000KTotal Submissions: 12692 Accepted: 5091
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
Source
USACO 2005 January Silver
题意:把一个整数划分成2的次幂相加的方案数(类似于整数划分)
解题思路:
可以把n分成奇数和偶数来分别对待:因为2^0=1,2^1=2,2^2=4......
1、n为奇数:n的划分中肯定都要含1,所以 num[n] = num [n-1]; 即把n-1的划分方案每个加1
2、n为偶数:可以分成两种情况来考虑:一、划分方案中含有1(那么1的个数肯定为偶数),(这时n-1为奇数,n-1的划分中都含1),所以划分方案=num[n-1];
二、划分方案中不含1,那么划分中肯定都是2的倍数,(因为只有2︿0=1),所以划分方案=num[n/2];
即n为偶数时 num[n] = num[n-1] + num[n/2] ;
附AC代码:
#include <stdio.h>#include <string.h>#include <stdlib.h>#define mod 1000000000int f(int n){ int i,j,k,*s; s = (int *)malloc((n+1)*sizeof(int)); memset(s,0,4*(n+1)); s[1]=1; for(i=2;i<=n;i++) { if(i&1) s[i]=s[i-1]%mod; else { s[i]=(s[i-1]+s[i/2])%mod; } } return s[n]%mod;}int main(){ int n; scanf("%d",&n); printf("%d\n",f(n)); //system("pause"); return 0;}
体会:
没好好看题,第一眼看到划分序列,立马想到整数划分,然后按照那个思路写,然后也没写对
这道题运用dp的思想,然后根据题意,抓住2的次幂,很巧妙地解法
标签:DP
0 0
- 【DP】poj2229_Sumsets_201408041139
- dp
- dp
- dp
- 【DP】
- dp
- dp
- DP
- DP
- DP
- DP
- DP
- dp
- DP
- dp
- DP
- DP
- dp
- JDK5.0垃圾收集优化之--Don't Pause
- OpenStack计算节点上虚拟网络(Neutron)详解
- php获取手机os
- 解释一下Windows的消息机制
- 一段旧代码 ———— linux下C语言操作mysql
- 【DP】poj2229_Sumsets_201408041139
- 未能加载文件或程序集“Microsoft.Office.Interop.Word, Version=11.0.0.0, Cultu
- 黑马程序员 java学习笔记——类加载器
- 程序员战场之路之抛砖引玉
- The Documentatiion of Kinect Face Tracking
- 公网网段,内网网段和虚拟机网段
- Partitioning your job into maps and reduces
- 数字电路设计之算数右移的verilog实现
- 【HDU】2444 The Accomodation of Students 二分匹配