动态规划法利用问题的最优性原理,以自底向上的方式从子问题的最优解逐步构造出整个问题的最优解。
DP
就是要避免重复计算!
其实只要数据不重复,递推和递归就算DP 了!
两道简单的 D p 入门 题 。
nefu 17 代码 :
nefu 20 代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
using namespace std;
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
int data[102][102];//输入放数据
int inp[102][102];// 放数字和
int n;
while(cin>>n)
{
memset(inp,0,sizeof(inp));
memset(data,0,sizeof(data));
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
{
cin>>data[i][j];
if (i==1)
inp[i][j]=data[i][j];
else
inp[i][j]=max(inp[i-1][j],inp[i-1][j-1])+data[i][j];
}
int tmp=0;
for(int k=1;k<=n;k++)
if (tmp<=inp[n][k])
tmp=inp[n][k];
cout<<tmp<<endl;
}
return 0;
}
nefu 20 代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a[16][16];
int i,j;
for(i=0;i<16;i++)
{
a[i][0]=1;
a[0][i]=1;
}
for(i=1;i<16;i++)
for(j=1;j<16;j++)
{
a[i][j]=a[i-1][j]+a[i][j-1];
}
int n;
while(scanf("%d",&n),n)
{
printf("%d\n",a[n][n]);
}
return 0;
}