10.1.5.253    1143    数字金字塔
#include <iostream>
#include<string.h>
using namespace std;
int a[1005][1005],b[1005][1005];
int n;
int max(int x, int y)
{ return x>y?x:y ; } int f(int i,int j)
{
if(b[i][j]!=-1) return b[i][j];
return b[i][j]=a[i][j]+max(f(i+1,j),f(i+1,j+1));
} int main()
{
int i,j; while(cin>>n)
{ for(i=0;i<n;i++)
for(j=0;j<=i;j++) cin>>a[i][j];
memset(b,-1,sizeof(b));
for(j=0;j<n;j++) b[i-1][j]=a[i-1][j];
cout<<f(0,0)<<endl;
} } 17 nyist
//               Accept
//记忆式搜索
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char a[10002];
int b[10002];
int n,ans;
int f(int x)
{
int i,t;
if(b[x]>0) return b[x];
b[x]=1;
for(i=0;i<=x-1;i++)
{
t=f(i);
if(a[i]<a[x] && b[x]<t+1) b[x]=t+1;
}
return b[x];
} int main( )
{
int i,j,len;
cin>>n;
for(i=1;i<=n;i++)
{
scanf("%s",a);
len=strlen(a) ;
for(j=0;j<len;j++) b[j]=-1; // 设置一个不可能出现的结果
f(len-1);
ans=1;
for(j=0;j<len;j++)
if(ans<b[j]) ans=b[j];
cout<<ans<<endl ;
} }
//  DP

#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char a[10002];
int b[10002];
int n,ans;
int dp(int x)
{
int i,j,max;
b[0]=1; for(i=1;i<=x;i++)
{max=1;
for(j=0;j<i;j++)
if(a[j]<a[i] && max<b[j]+1) max=b[j]+1;
b[i]=max;
}
} int main( )
{
int i,j,len;
cin>>n;
for(i=1;i<=n;i++)
{
scanf("%s",a);
len=strlen(a) ; dp(len-1);
ans=1;
for(j=0;j<len;j++)
if(ans<b[j]) ans=b[j];
cout<<ans<<endl ;
} } ******************************************************************88 #include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char a[10002];
int b[10002];
int n,ans;
int dp(int x)
{
int i,j,max;
ans=b[0]=1; for(i=1;i<=x;i++)
{max=1;
for(j=0;j<i;j++)
if(a[j]<a[i] && max<b[j]+1) max=b[j]+1;
b[i]=max;
if(b[i]>ans) ans=b[i];
}
} int main( )
{
int i,j,len;
cin>>n;
for(i=1;i<=n;i++)
{
scanf("%s",a);
len=strlen(a) ; dp(len-1); cout<<ans<<endl ;
} }

  

poj 1088滑雪     //DP

 #include <iostream>
using namespace std; int a[102][102],b[102][102];
int r, c,ans;
int f( int i, int j )
{ int max=1,t;
if( b[i][j] > 1 ) return b[i][j];
if( i + 1 <= r && a[i][j] > a[i+1][j] )
{ t = f( i + 1, j ) + 1;
if( max < t ) max = t;
}
if( j + 1 <= c && a[i][j] > a[i][j+1] )
{ t = f( i, j + 1 ) + 1;
if( max < t ) max = t;
}
if( i - 1 > 0 && a[i][j] > a[i-1][j] )
{ t = f( i - 1, j ) + 1;
if( max < t ) max = t;
}
if( j - 1 > 0 && a[i][j] > a[i][j-1] )
{ t = f( i, j - 1 ) + 1;
if( max < t) max = t;
}
return max;
} int main()
{ int i,j;
cin >> r >> c;
for ( i = 1; i <= r; ++i )
for ( j = 1; j <= c; ++j )
{ cin >> a[i][j]; b[i][j] = 1; }
ans = 1;
for( i = 1; i <= r; ++i )
for( j = 1; j <= c; ++j )
{ b[i][j] = f( i, j );
if( ans < b[i][j] ) ans = b[i][j];
}
cout << ans <<endl;
}

  

//2084  hdu  c++   数塔
#include <iostream>
#include<string.h>

using namespace std;
int a[105][105],b[105][105];
int n;
int max(int x, int y)
{ return x>y?x:y ; } int f(int i,int j)
{
if(b[i][j]!=-1) return b[i][j];
return b[i][j]=a[i][j]+max(f(i+1,j),f(i+1,j+1));
} int main()
{
int i,j,c;
cin>>c;
while(c--)
{
cin>>n ;
for(i=0;i<n;i++)
for(j=0;j<=i;j++) cin>>a[i][j];
memset(b,-1,sizeof(b));
for(j=0;j<n;j++) b[i-1][j]=a[i-1][j];
cout<<f(0,0)<<endl;
} }

  


  


  

动态规划 DP的更多相关文章

  1. 动态规划dp

    一.概念:动态规划dp:是一种分阶段求解决策问题的数学思想. 总结起来就一句话:大事化小,小事化了 二.例子 1.走台阶问题 F(10):10级台阶的走法数量 所以:F(10)=F(9)+F(8) F ...

  2. 算法-动态规划DP小记

    算法-动态规划DP小记 动态规划算法是一种比较灵活的算法,针对具体的问题要具体分析,其宗旨就是要找出要解决问题的状态,然后逆向转化为求解子问题,最终回到已知的初始态,然后再顺序累计各个子问题的解从而得 ...

  3. 【转】动态规划DP

    [数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...

  4. 动态规划DP的优化

    写一写要讲什么免得忘记了.DP的优化. 大概围绕着"是什么","有什么用","怎么用"三个方面讲. 主要是<算法竞赛入门经典>里 ...

  5. hdu 1421:搬寝室(动态规划 DP + 排序)

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  6. hdu 2059:龟兔赛跑(动态规划 DP)

    龟兔赛跑 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissi ...

  7. Luogu 2627 修建草坪 (动态规划Dp + 单调队列优化)

    题意: 已知一个序列 { a [ i ] } ,求取出从中若干不大于 KK 的区间,求这些区间和的最大值. 细节: 没有细节???感觉没有??? 分析: 听说有两种方法!!! 好吧实际上是等价的只是看 ...

  8. 动态规划DP入门

    百度百科↓ 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bellman ...

  9. hdu 1087 Super Jumping! Jumping! Jumping!(动态规划DP)

    Super Jumping! Jumping! Jumping!Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  10. nyoj 16-矩形嵌套(贪心 + 动态规划DP)

    16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...

随机推荐

  1. 理解 B*tree index内部结构

    转载请注明出处:http://write.blog.csdn.net/postedit/40589651 Oracle数据库里的B树索引就好象一棵倒长的树.它包括两种类型的数据块:一种是索引分支块,还 ...

  2. C++中将string类型转换为int, float, double类型 主要通过以下几种方式:

      C++中将string类型转换为int, float, double类型 主要通过以下几种方式: # 方法一: 使用stringstream stringstream在int或float类型转换为 ...

  3. 使用MySQL的LAST_INSERT_ID--转

    LAST_INSERT_ID 自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 The ID that was generat ...

  4. HTML CSS样式基础

    一.css 1.什么是css? Cascading Style Sheet 级联样式表 改变样式的一个工具,说白了,就是为了让我们的页面好看, HTML底层封装了css这样一个工具. 2.怎么使用cs ...

  5. SQL语句添加删除修改字段及一些表与字段的基本操作

    用SQL语句添加删除修改字段 1.增加字段     alter table docdsp    add dspcode char(200)2.删除字段     ALTER TABLE table_NA ...

  6. MTK Android 默认值修改笔记

    1.设置菜单: 1.1位置信息(Location)默认关闭: 请将 alps\frameworks\base\packages\SettingsProvider\res\values\default. ...

  7. 查看sqlserver默认的编码格式

    SQL语句:SELECT COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage') 936 简体中文GBK 950 繁体中文BIG ...

  8. QT 5.1.1 for Android 开发环境搭建与配置【Windows 7】

    前言:本人操作系统为Windows7 64位,用的是32位的安装包,32位系统没有验证. 一.首先下载以下安装包,如果提供的链接失效请自行下载: (1) Android SDK (Windows 32 ...

  9. C++朝花夕拾【更新】

    C++拾遗 更新一些平时遇到的小细节: 1.关于类的无参构造函数和带有全部默认参考值的构造函数的区别 书上说的是带有全部默认值的构造函数就是无参构造函数,私以为不以为然,来看下边这个例子: #incl ...

  10. POJ 3254 状压DP

    题目大意: 一个农民有一片n行m列 的农场   n和m 范围[1,12]  对于每一块土地 ,1代表可以种地,0代表不能种. 因为农夫要种草喂牛,牛吃草不能挨着,所以农夫种菜的每一块都不能有公共边. ...