POJ 3176 Cow Bowling

来源:互联网 发布:python 服务器 引擎 编辑:程序博客网 时间:2024/05/04 07:30

原题链接

思路:动态规划。
动态方程:dp[i][j] = dp[i][j] + max(dp[i-1][j-1], dp[i-1][j])
dp[i][j]表示到点(i,j)的最大数字和。

AC代码:

#include <iostream>#include <algorithm>#include <stdlib.h>#include <queue>#include <cstring>using namespace std;int n, i, j, cow[400][400], dp[400][400], nummax=0;//cow:三角阵各点对应的数字 //dp[i][j]是到(i,j)所经过的数字最大和int main(){    cin>>n;    getchar();    for(i=0;i<n;i++){        for(j=0;j<=i;j++){            cin>>cow[i][j];            getchar();        }    }    dp[0][0]=cow[0][0];    for(i=1;i<n;i++){        dp[i][0]=cow[i][0]+dp[i-1][0];        for(j=1;j<i;j++){            dp[i][j]=cow[i][j]+max(dp[i-1][j],dp[i-1][j-1]);        }        dp[i][i]=cow[i][i]+dp[i-1][i-1];    }    for(j=0;j<n;j++){        if(nummax<dp[n-1][j])  nummax=dp[n-1][j];    }    cout<<nummax<<endl;    return 0; } 
1 0