poj 2229 拆数问题 dp算法
2024-08-29 12:54:47
题意:一个n可以拆成 2的幂的和有多少种
思路:先看实例
1 1
2 1+1 2
3 1+1+1 1+2
4 1+1+1+1 1+1+2 2+2 4
5 1+1+1+1+1 1+ 1+1+2 1+2+2 1+4
- 对于奇数:相当于前面一个偶数的每一种情况的开头+1 dp[i]=dp[i-1]
- 对于偶数 分两种情况 开头是1的 相当于 dp[i-1] 开头没有1的 相当于 dp[i/2]的情况
解决问题的代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int dp[];
int main()
{
int n;
dp[] = ;
scanf("%d", &n);
for (int i = ; i <= n; i++)
{
if (i % == ) dp[i] = dp[i - ];
else dp[i] = (dp[i - ] + dp[i / ])% ;
}
printf("%d\n", dp[n]);
return ;
}
最新文章
- ros::spin() 和 ros::spinOnce() 区别及详解
- 禁止从别的应用启动Activity
- mybatis多表连接在一起查询
- java获取短uuid
- iOS 展示二级页面
- libevent源码深度剖析
- JS 变量或参数是否有值的判断
- 新增html元素的使用
- 【BZOJ 1015】[JSOI2008]星球大战starwar
- 将CString(unicode)转换为char*(ANSI)
- hdu1540-Tunnel Warfare (线段树区间合并)
- javascript动画效果之多物体透明度
- 【TensorFlow使用教程】1 环境搭建
- Python语言——Python语言概述
- ECharts JS应用:图表页面实现
- c++中运算符重载
- codeforces 1B Spreadsheets
- phpstudy安装redis
- 关于MFLAGS与MAKEFLAGS
- C语言程序设计I—第一周教学