Dp 入门 ( nefu 17 nefu 20 )

来源:互联网 发布:python celery mq 编辑:程序博客网 时间:2024/06/06 03:14
         
            动态规划法利用问题的最优性原理,以自底向上的方式从子问题的最优解逐步构造出整个问题的最优解。
          
           DP 就是要避免重复计算!
          
           其实只要数据不重复,递推和递归就算DP 了!
          
           两道简单的 D p 入门  题 。
 
 
          nefu 17  代码 :
#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;}

原创粉丝点击