(Relax njuptoj)1009 数的计算(DP)
来源:互联网 发布:apache tomcat下载 编辑:程序博客网 时间:2024/06/06 06:41
其实DP 的关键在于找到子问题的结构。
我们规定arr[i][j]为在j左边填写i时的数的个数,很明显:
arr[i][j]=a[0][i]+a[1][i]+...+arr[i/2][i](i<=j/2)
我们首先规定
arr[0][t]=1(0<=t<=n,n为输入的自然数),因为左边填0时就为本数,数的个数当然为1.
我们规定arr[i][j]为在j左边填写i时的数的个数,很明显:
arr[i][j]=a[0][i]+a[1][i]+...+arr[i/2][i](i<=j/2)
我们首先规定
arr[0][t]=1(0<=t<=n,n为输入的自然数),因为左边填0时就为本数,数的个数当然为1.
按照子问题结构,先解子问题,再得到原问题的解。
/* * zy_1009.cpp * * Created on: 2013年12月15日 * Author: Administrator */#include <iostream>using namespace std;const int maxn = 1005;int a[maxn][maxn];int n;void prepare(){//memset(a,0,sizeof(a));int i,j;for(i = 0 ; i <= 500 ; ++i){for(j = 0 ; j <= 1000 ; ++j){a[i][j] = 0;}}for(i = 1 ; i < maxn ; ++i){a[0][i] = 1;}int k;for(i = 0 ; i <= n ; ++i){for(j = 1 ; j <= i/2 ; ++j){for(k = 0 ; k < j ; ++k){a[j][i] += a[k][j];}}}}int main(){while(scanf("%d",&n)!=EOF){prepare();int sum = 0;int i;for(i = 0 ; i <= n/2 ; ++i){sum += a[i][n];}//printf("%d\n",sum);cout<<sum<<endl;}return 0;}
1 0
- (Relax njuptoj)1009 数的计算(DP)
- hdoj1466 计算直线的交点数 ( DP )
- hdu1466 计算直线的交点数 DP
- 计算直线的交点数(hdu1466简单的dp)
- hdu 1466计算直线的交点数 (简单dp)
- hdu1466 计算直线的交点数//dp+set
- hduoj1466,计算直线的交点数,简单DP
- HDU 1466 计算直线的交点数(dp)
- HDU-1466 计算直线的交点数 DP
- HDU 1466 计算直线的交点数(简单dp)
- HDU1466 计算直线的交点数 【DP】+【经典题】
- HDU - 1466 计算直线的交点数 (dp)
- hdoj 1466 计算直线的交点数 【dp】
- hdoj 1466 计算直线的交点数 【经典DP】
- Hdoj 1466 计算直线的交点数 【DP】
- HDU---1466-计算直线的交点数(DP)
- HDU 1466 计算直线的交点数(dp)
- HDU 1466 计算直线的交点数 dp晕
- Smali--Dalvik虚拟机指令语言
- Windows Azure 安全最佳实践 - 第 2 部分:Azure 提供哪些现成可用的安全机制
- 算法之旅,直奔<algorithm>之十 count_if
- Java使用Base64
- NYOJ 100 1的个数
- (Relax njuptoj)1009 数的计算(DP)
- Chapter 4. MATLAB语法基础
- Cocos2d-x的2.1.4版本新建项目
- 双数组trie
- 杂记 待整理
- 转载一篇文章 写的很好 关于北京地铁涨价的
- SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色
- PHPCMSv9修改后台首页
- 【acm补习】miaomiao和wuwu的格子游戏