POJ 2229 dp

题意

传送门 POJ 2229

考虑 N 的组合中有 1 的情况,其数量等于 N - 1 的组合数;考虑组合中无 1 的情况,则 N 为偶数,其数量等于 N / 2 的组合数。

d p [ i ] = d p [ i 1 ] , i dp[i]=dp[i-1],i为奇数

d p [ i ] = d p [ i 1 ] + d p [ i / 2 ] , i dp[i]=dp[i-1]+dp[i/2],i为偶数

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#define min(a,b)    (((a) < (b)) ? (a) : (b))
#define max(a,b)    (((a) > (b)) ? (a) : (b))
#define abs(x)    ((x) < 0 ? -(x) : (x))
#define INF 0x3f3f3f3f
#define delta 0.85
#define eps 1e-3
#define PI 3.14159265358979323846
#define MAX_N 1000005
using namespace std;
const int mod = 1e9;
int N;
int dp[MAX_N];

int main(){
	dp[1] = 1;
	for(int i = 2; i < MAX_N; i++)  dp[i] = (dp[i - 1] + ((i & 1) == 0 ? dp[i / 2] : 0)) % mod;
	while(~scanf("%d", &N)){
		printf("%d\n", dp[N]);
	}
	return 0;
}
发布了91 篇原创文章 · 获赞 1 · 访问量 1626

猜你喜欢

转载自blog.csdn.net/neweryyy/article/details/105106324