USACO Number Triangles

来源:互联网 发布:115网盘会员充值淘宝 编辑:程序博客网 时间:2024/05/16 15:19
【题意】
给定三角形,每个位置上有权值。从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层。要求找出一条路径,使路径上的值最大。

【分析】
无语啊,又是数字三角形......
换一换DP,改成状态->决策的转移方式写写......
这样有着一定的好处,可以避免越界,时间复杂度的常数也小一些

【代码】

/*ID:y2007031PROG:numtriLANG:C++*/#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;int n,p[1001][1001];int f[1001][1001],res;int max(int i,int j){return i>j?i:j;}int main(void){freopen("numtri.in","r",stdin);freopen("numtri.out","w",stdout);scanf("%d",&n);for (int i=1;i<=n;i++)for (int j=1;j<=i;j++) scanf("%d",&p[i][j]);for (int i=1;i<n;i++)for (int j=1;j<=i;j++){f[i][j]+=p[i][j];f[i+1][j]=max(f[i+1][j],f[i][j]);f[i+1][j+1]=max(f[i+1][j+1],f[i][j]);}for (int i=1;i<=n;i++) f[n][i]+=p[n][i];for (int i=1;i<=n;i++) res=max(res,f[n][i]);printf("%d\n",res);return 0;}


0 0
原创粉丝点击