zoukankan      html  css  js  c++  java
  • 【codevs1220】数字三角形

    problem

    solution

    codes

    //f[i][j]:从(i,j)出发能获得的最大值 _裸DFS
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n, a[110][110], f[110][110];
    int dfs(int i, int j){
        if(f[i][j])return f[i][j];
        if(i>n || j>n)return 0;
        return f[i][j] = max(dfs(i+1,j),dfs(i+1,j+1))+a[i][j];
    }
    int main(){
        cin>>n;
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= i; j++)
                cin>>a[i][j];
        cout<<dfs(1,1)<<"
    ";
        return 0;
    }
    //f[i][j]:从(i,j)出发能获得的最大值 _裸递推
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n, a[110][110], f[110][110];
    int main(){
        cin>>n;
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= i; j++)
                cin>>a[i][j];
        for(int i = n; i >= 1; i--)
            for(int j = 1; j <= i; j++)
                f[i][j] = max(f[i+1][j], f[i+1][j+1])+a[i][j];
        cout<<f[1][1]<<"
    ";
        return 0;
    }
    //f[i][j]:从(1,1)到(i,j)能获得的最大值 _裸递推
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n, a[110][110], f[110][110];
    int main(){
        cin>>n;
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= i; j++)
                cin>>a[i][j];
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= i; j++)
                f[i][j] = max(f[i-1][j], f[i-1][j-1])+a[i][j];
        int ans = -0xffffff;
        for(int i = 1; i <= n; i++)ans = max(ans, f[n][i]);
        cout<<ans<<'
    ';
        return 0;
    }
    //f[i][j]:从(i,j)出发能获得的最大值 _滚动数组
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n, a[110][110], f[2][110];
    int main(){
        cin>>n;
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= i; j++)
                cin>>a[i][j];
        for(int i = n; i >= 1; i--)
            for(int j = 1; j <= i; j++)
                f[i%2][j] = max(f[(i+1)%2][j], f[(i+1)%2][j+1])+a[i][j];
        cout<<f[1][1]<<"
    ";
        return 0;
    }
    //f[i][j]:从(1,1)到(i,j)能获得的最大值 _滚动数组2
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n, a, f[2][110];
    int main(){
        cin>>n;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= i; j++){
                cin>>a;
                f[i%2][j] = max(f[(i-1)%2][j], f[(i-1)%2][j-1])+a;
            }
        }
        int ans = -0xffffff;
        for(int i = 1; i <= n; i++)ans = max(ans, f[n%2][i]);
        cout<<ans<<"
    ";
        return 0;
    }
  • 相关阅读:
    点击退出 防止回退
    AngularJS select中ngOptions用法详解
    git hub
    .ashx datatable转excel
    写日志 log 到文件夹
    easyui layout 布局title
    easyui tree 折叠节点
    转json using指令
    Qt QWindow转QWidget
    CEF 重写弹窗事件
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444771.html
Copyright © 2011-2022 走看看