#encoding:utf-8
#求fibo数列的非递归版本:动态规划,可用来练练手
p=[]
def fibo(n):
i=0
p.append(1)
p.append(1)
for i in range(2,n+1):
if i!=n:
p.append(p[i-1]+p[i-2])
else:
return p[i-1]+p[i-2]
print fibo(10)
#求fibo数列的非递归版本:动态规划,可用来练练手
p=[]
def fibo(n):
i=0
p.append(1)
p.append(1)
for i in range(2,n+1):
if i!=n:
p.append(p[i-1]+p[i-2])
else:
return p[i-1]+p[i-2]
print fibo(10)
// poj1163.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
//POJ1163 The Triangle
//动态规划 比较简单
//#include <iostream.h>
#define MAX 101
int triangle[MAX][MAX]=
{
{7},
{3,8},
{8,1,0},
{2,7,4,4},
{4,5,2,6,5}
};
int maxtri[MAX][MAX]={0};
int n;
int longestPath(int hight);
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d",longestPath(4));
return 0;
}
int longestPath(int hight)
{
int i,j;
int curmax;
int totalmax=0;
maxtri[0][0]=triangle[0][0];
for(i=1;i<hight;i++)
{
maxtri[i][0]=maxtri[i-1][0]+triangle[i][0];
maxtri[i][i]=maxtri[i-1][i-1]+triangle[i][i];
for (j=1;j<i;j++)
{
if(maxtri[i-1][j-1]>maxtri[i-1][j])
maxtri[i][j]=maxtri[i-1][j-1]+triangle[i][j];
else
maxtri[i][j]=maxtri[i-1][j]+triangle[i][j];
if (maxtri[i][j]>totalmax)
totalmax=maxtri[i][j];
}
}
return totalmax;
}
//
#include "stdafx.h"
//POJ1163 The Triangle
//动态规划 比较简单
//#include <iostream.h>
#define MAX 101
int triangle[MAX][MAX]=
{
{7},
{3,8},
{8,1,0},
{2,7,4,4},
{4,5,2,6,5}
};
int maxtri[MAX][MAX]={0};
int n;
int longestPath(int hight);
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d",longestPath(4));
return 0;
}
int longestPath(int hight)
{
int i,j;
int curmax;
int totalmax=0;
maxtri[0][0]=triangle[0][0];
for(i=1;i<hight;i++)
{
maxtri[i][0]=maxtri[i-1][0]+triangle[i][0];
maxtri[i][i]=maxtri[i-1][i-1]+triangle[i][i];
for (j=1;j<i;j++)
{
if(maxtri[i-1][j-1]>maxtri[i-1][j])
maxtri[i][j]=maxtri[i-1][j-1]+triangle[i][j];
else
maxtri[i][j]=maxtri[i-1][j]+triangle[i][j];
if (maxtri[i][j]>totalmax)
totalmax=maxtri[i][j];
}
}
return totalmax;
}
#poj 2593
#Max Sequence
#最大递增数列
def max_sequ(data):
i=0
cursum=0
curmax=0
res=0
buf=[0 for i in range(0,len(data))]
#rebuf=[0 for i in range(0,len(data))]
for i in range(0,len(data)):
cursum+=data[i]
if cursum<0:
cursum=0
if cursum>curmax:
curmax=cursum
buf[i]=curmax
cursum=0
curmax=0
for i in range(len(data)-1,0,-1):
cursum+=data[i]
curi=0
if cursum<0:
cursum=0
if cursum>curmax:
curmax=cursum
if(curmax+buf[i-1]>res):
res=curmax+buf[i-1]
curi=i
print buf#,rebuf
print 'location of i',curi+1
return res
indata=[-5,9,-5,11,20,4,-32,68,-34,45]
print max_sequ(indata)
#Max Sequence
#最大递增数列
def max_sequ(data):
i=0
cursum=0
curmax=0
res=0
buf=[0 for i in range(0,len(data))]
#rebuf=[0 for i in range(0,len(data))]
for i in range(0,len(data)):
cursum+=data[i]
if cursum<0:
cursum=0
if cursum>curmax:
curmax=cursum
buf[i]=curmax
cursum=0
curmax=0
for i in range(len(data)-1,0,-1):
cursum+=data[i]
curi=0
if cursum<0:
cursum=0
if cursum>curmax:
curmax=cursum
if(curmax+buf[i-1]>res):
res=curmax+buf[i-1]
curi=i
print buf#,rebuf
print 'location of i',curi+1
return res
indata=[-5,9,-5,11,20,4,-32,68,-34,45]
print max_sequ(indata)
// poj1141.cpp : Defines the entry point for the console application.
//Brackets Sequence 括号序列
#include "stdafx.h"
#include "windows.h"
#define INT_MAX 999999
char data [100]="[][()]][" ;
int dlen ;
int d [100][100]={0};
int excnt =0;//用来统计动态规划的调用次数
//当前这个实例中:不用记忆搜索运行了44065次 而用了动态规划则只用了6321次
//可见其效率的差别
int bracket (int i ,int j )
{
int k;
int answer;
excnt++;
if ( i> j)
{
return 0;
}
else if( i== j)
{
return 1;
}
else
{
answer= INT_MAX;
if (( data[ i]== '(' && data[ j]== ')')||
( data[ i]== '[' && data[ j]== ']'))
{
if ( d[ i+1][ j-1]==0)
{
answer= min( answer, bracket( i+1, j-1));
}
else
answer= min( answer, d[ i+1][ j-1]);
d[ i][ j]= answer;
}
if ( data[ i]== '('|| data[ i]== '['||
data[ i]== ']'|| data[ i]== ']')
{
if ( d[ i+1][ j]==0)
{
answer= min( answer, bracket( i+1, j)+1);
}
else
answer= min( answer, d[ i+1][ j]+1);
d[ i][ j]= answer;
}
if ( data[ j]== ')'|| data[ j]== ']'||
data[ j]== '('|| data[ j]== '(')
{
if( d[ i][ j-1]==0)
{
answer= min( answer, bracket( i, j-1)+1);
}
else
answer= min( answer, d[ i][ j-1]+1);
d[ i][ j]= answer;
}
for ( k= i; k< j-1; k++)
{
answer= min( answer, bracket( i, k)+ bracket( k+1, j));
}
}
return answer;
}
int _tmain (int argc , _TCHAR * argv [])
{
int res;
int i, j;
for ( i=0; i<100; i++)
{
for ( j=0; j<100; j++)
{
if( i== j)
d[ i][ j]=1;
}
}
res= bracket(0, strlen( data)-1);
printf( "%d\nexcnt=%d" ,res ,excnt );
return 0;
}