DP 动态规划 Problem O 1015 二进制十进制转换
来源:互联网 发布:java get post 区别 编辑:程序博客网 时间:2024/05/30 05:01
Problem O ID:1015
简单题意:给出一个1000以内的十进制数,求其二进制形式。
解题思路形成过程:如图所示:
每组的前一半与后一半各服从相同的规律:前一半:a[i]=head+a[i-t1]%tail;后一半:a[i]=head+a[i-t2];(head:此组数据的基数,tail:tail=head/10,i-t1、i-t2:指向前一组数据的第一个元素)。
因此,按照此状态转移方程式逐个遍历,将结果提前储存到数组中,对应输入的数据n,直接输出相应的二进制数即可。
感想:列到纸上时有很明显的规律,但是状态转移方程的具体实现部分用代码描述起来稍微有些复杂,对细节的操作要求比较高,利用很多数据,出现很多数据。心中不能慌、不能乱,要做到心中有数,方能气定神闲。
代码:#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[1001];void dp(){ a[1]=1;a[2]=10;a[3]=11; int t1=2,t2=4,t3=2; int head=100,tail=10;//head:此组数据的基数;tail:tail=head/10;i-t1、i-t2:指向前一组数据的第一个元素。 bool tag=true; //利用它和t3来实现一组数据分成两半进行计算。 for(int i=4;i<=1000;++i) { if(tag){ a[i]=head+a[i-t1]%tail; --t3; if(t3==0){ t3=t1; tag=false; continue; } } if(!tag){ a[i]=head+a[i-t2]; --t3; if(t3==0){ tag=true; head*=10; tail*=10; t1*=2; t2*=2; t3=t1; } } }}int main(){ // freopen("1.txt","r",stdin); int n; dp(); while(scanf("%d",&n)!=EOF) printf("%d\n",a[n]);}
0 0
- DP 动态规划 Problem O 1015 二进制十进制转换
- 动态规划 problem o
- 动态规划—Problem O
- 动态规划-3015-十进制转二进制
- 动态规划——problem o
- 动态规划-多重背包问题-二进制转换
- DP 动态规划 Problem W 1023 背包
- 十进制转换二进制(反码)
- 十进制转换为二进制
- 二进制与十进制转换
- JvavScript二进制十进制转换
- 十进制转换成二进制
- 十进制转换二进制等等
- 二进制_十进制转换
- b2d 二进制转换十进制
- 十进制转换二进制
- 十进制转换二进制
- 十进制转换二进制数
- classloader之getresource,findClass深度分析
- 【HUSTOJ】1025: 统计字符的个数
- android之事件分发的细节说明
- 上机题-合并表记录
- 地图定位
- DP 动态规划 Problem O 1015 二进制十进制转换
- Problem G: 小数的处理
- ubuntu终端自体重叠问题
- poj 1207 The 3n + 1 problem -- 模拟
- 看了淘宝代销(分销)的结果
- Java实现的网络爬虫
- PCL库文件配置那点事
- 第6周项目4--静态成员的应用
- Nodejs(三)