zoukankan      html  css  js  c++  java
  • COJ 0034 动态的数字三角形

    题解:简单dp吧。

    自顶向下的写法:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #define PAU putchar(' ')
     8 #define ENT putchar('
    ')
     9 using namespace std;
    10 const int maxn=1000+10;
    11 int a[maxn][maxn],n,cnt=1;
    12 bool vis[maxn][maxn];
    13 inline int read(){
    14     int x=0,sig=1;char ch=getchar();
    15     while(!isdigit(ch)){if(ch=='-')sig=-1;ch=getchar();}
    16     while(isdigit(ch))x=10*x+ch-'0',ch=getchar();
    17     return x*=sig;
    18 }
    19 inline void write(int x){
    20     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    21     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
    22     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    23 }
    24 int solve(int x,int y){
    25     if(vis[x][y]||x==n) return a[x][y];
    26     vis[x][y]=true;
    27     a[x][y]+=max(solve(x+1,y),solve(x+1,y+1));return a[x][y];
    28 }
    29 void init(){
    30     n=read();
    31     for(int i=1;i<=n;i++)
    32         for(int j=1;j<=i;j++)
    33             a[i][j]=read();
    34     write(solve(1,1));
    35     return;
    36 }
    37 void work(){
    38     return;
    39 }
    40 void print(){
    41     return;
    42 }
    43 int main(){init();work();print();return 0;}

    自底向上的写法:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #define PAU putchar(' ')
     8 #define ENT putchar('
    ')
     9 using namespace std;
    10 const int maxn=1000+10;
    11 int a[maxn][maxn],n,ans=-1;
    12 bool vis[maxn][maxn];
    13 inline int read(){
    14     int x=0,sig=1;char ch=getchar();
    15     while(!isdigit(ch)){if(ch=='-')sig=-1;ch=getchar();}
    16     while(isdigit(ch))x=10*x+ch-'0',ch=getchar();
    17     return x*=sig;
    18 }
    19 inline void write(int x){
    20     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    21     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
    22     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    23 }
    24 void init(){
    25     n=read();
    26     for(int i=1;i<=n;i++)
    27         for(int j=1;j<=i;j++)
    28             a[i][j]=read();
    29     for(int i=2;i<=n;i++) for(int j=1;j<=i;j++) a[i][j]+=max(a[i-1][j],a[i-1][j-1]);
    30     for(int i=1;i<=n;i++) if(ans<a[n][i]) ans=a[n][i];
    31     write(ans);
    32     return;
    33 }
    34 void work(){
    35     return;
    36 }
    37 void print(){
    38     return;
    39 }
    40 int main(){init();work();print();return 0;}

    一开始用指针写的,我真是被数据结构毒害了。。。。

  • 相关阅读:
    centos 7 安装nvidia显卡驱动
    Ubuntu 16.04LTS 安装 MATLAB 2014B
    Linux 查看CPU温度
    pip: unsupported locale setting
    ubuntu 卸载从源码安装的 emacs
    html css使用特殊自定义字体避免侵权
    JS操作iframe父级子级元素,jquery自动点击iframe里按钮
    Iframe标签显示目标网页的指定区域,视频可全屏可缩小
    禁止所有搜索爬虫访问网站指定目录robots.txt
    ThinkPHP5.0、5.1和6.0教程文档合集(免费下载)
  • 原文地址:https://www.cnblogs.com/chxer/p/4591814.html
Copyright © 2011-2022 走看看