leecode动态规划数组矩阵

1.LIS

状态设计:F[i]代表以A[i]结尾的LIS的长度
状态转移:F[i]=max{F[j]+1}(1<=j< i,A[j]< A[i])
边界处理:F[i]=1(1<=i<=n)
时间复杂度:O(n^2)

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) 
    {
        scanf("%d",&a[i]);
        f[i]=1;
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++)
            if(a[j]<a[i]) 
		f[i]=max(f[i],f[j]+1);
    for(int i=1;i<=n;i++) 
        ans=max(ans,f[i]);
    printf("%d\n",ans);
    return 0;
}

2.

class Solution {  
public:  
    int minimumTotal(vector<vector<int> > &triangle) {  
        for (int i = triangle.size() - 2; i >= 0; --i)  
            for (int j = 0; j < i + 1; ++j){  
                if(triangle[i+1][j] > triangle[i+1][j+1]){  
                    triangle[i][j] += triangle[i+1][j+1];  
                }else{  
                    triangle[i][j] += triangle[i+1][j];  
                }  
            }    
        return triangle[0][0];  
    }  
};

猜你喜欢

转载自blog.csdn.net/sinat_34080511/article/details/82698986