http://poj.org/problem?id=2229

先把题目连接发上。题目的意思就是:

把n拆分为2的幂相加的形式,问有多少种拆分方法。

看了大佬的完全背包代码很久都没懂,就照着网上的写了动态规划的思路

先把组合数存进数组

任何dp一定要注意各个状态来源不能有重复情况。

根据奇偶分两种情况

如果n是奇数则与n-1的情况相同,它只比前一个偶数多了一个1,并不能合成一个2的幂,所以是一样的。

如果n是偶数则还可以分为两种情况,有1和没有1。这样分可以保证两种情况没有重复)

  举个栗子 8 有1 11111111 1111112 等等

       没1 2222 224 等等

   这么算是为了防止重复运算=。=,虽然我也不是很清楚为什么......

对于有1的情况可以直接拆出两个1(拆一个也行,但变成奇数之后一定会拆另一个),然后变为n-2的情况。(就是说,dp[i]=dp[i-1]或者dp[i]=dp[i-2]都是可以的,因为当dp为i-1时,i-1是奇数,根据第一条,dp[i-1]==dp[i-2])

对于没有1的情况可以直接将其转化为n/2。因为n拆分出所有的数字都是2的倍数。只需要将每种拆分结果中的数字都除以2就会与n/2的一种拆分相对应。由递推可以求得

先把前十位的答案写出来

1
1
2
2
3
2
4
4
5
4
6
6
7
6
8
10
9
10

当我们取8时 考虑不带1的话 2222 224 44 8 四种,和dp[4]的结果是一样的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
long long dp[1000005]={0};
int main()
{
int n,i;
memset(dp,0,sizeof(dp));
dp[1]=1;dp[2]=2;
for(i=3;i<=1000000;i++)
{
if(i%2==1)//奇数
dp[i]=dp[i-1];
else//偶数
dp[i]=dp[i-2]+dp[i/2];//要把两种情况加起来
if(dp[i]>1000000000)
dp[i]-=1000000000;
}
//上面在用数组存下每一种情况
while(cin>>n)
cout<<dp[n]<<endl;
return 0;
}

poj 2229 一道动态规划思维题的更多相关文章

  1. poj 1032 Parliament 【思维题】

    题目地址:http://poj.org/problem?id=1032 Parliament Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  2. 洛谷P1028 数的计算 题解 动态规划入门题

    题目链接:https://www.luogu.com.cn/problem/P1028 题目描述 我们要求找出具有下列性质数的个数(包含输入的自然数 \(n\) ): 先输入一个自然数 \(n(n \ ...

  3. UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)

    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...

  4. zoj 3778 Talented Chef(思维题)

    题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...

  5. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  6. BZOJ4401: 块的计数 思维题

    Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...

  7. CodeForces - 631C ——(思维题)

    Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...

  8. UVA.11384 Help is needed for Dexter (思维题)

    UVA.11384 Help is needed for Dexter (思维题) 题意分析 同样水题一道,这回思路对了. 给出数字n,面对一个1,2,3,4--n的数字序列,你可以对他们的部分或者全 ...

  9. CodeForces - 1102A(思维题)

    https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...

随机推荐

  1. NuxtJS快速入门

    服务器端渲染(SSR) 知识储备 ES6 Nodejs Vue React Angular 什么是服务器端渲染 前端渲染:html页面作为静态文件存在,前端请求时后端不对该文件做任何内容上的修改,直接 ...

  2. 容器云平台No.5~企业级私有镜像仓库Harbor V2.02

    镜像仓库 仓库,顾名思义,就是存放东西的地方,Docker仓库,理所当然,就是存放docker镜像的地方了. Docker仓库分公有仓库和私有仓库.共有仓库有hub.docker.com.gcr.io ...

  3. 工具请求接口参数为string类型的JSON字符串时需要加转义字符模拟测试

    例如postMan传String类型的json字符串请后台接口时,需要\转义

  4. 《Web安全攻防渗透测试实战指南》 各类型 SQL注入 实验过程整理

    Union注入 https://www.jianshu.com/p/8a11bf55aaee Boolean注入 https://www.jianshu.com/p/e4086f59812d 报错注入 ...

  5. Object.defineProperty和proxy

    Object.defineProperty问题 Object.defineProperty() 无法监控到数组下标的变化.vue只能通过以下几种方法来监听 pop() shift() unshift( ...

  6. Redis 4.0.2分布式锁的Java实现

    简介 Redis分布式锁算法有两种,一种是单个Redis实例下的,一种是多个Redis实例的Redlock算法. 官方推荐Redlock算法,但是这个算法需要比较多的Redis实例而且是完全互相独立, ...

  7. Django 联合唯一UniqueConstraint

    from django.db import models class UserAttention(models.Model): watcher = models.ForeignKey('user.Us ...

  8. Effective C++ 读书笔记 名博客

    https://www.cnblogs.com/harlanc/tag/effective%20c%2B%2B/default.html?page=3

  9. 04 sublime text 3在线安装package control插件,之后安装主题插件和ConvertToUTF8 插件

    前提:需要@@科学@@上网 在线安装包通常都需要@@科学@@上网 安装package control插件 在线安装package control插件 按ctrl+shift+p 输入install,选 ...

  10. 剑指Offer(四):重建二叉树

    一.前言 刷题平台:牛客网 二.题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6, ...