USACO 1.5 Number Triangles

简单的dp题
由于每次只用到tri[n-1]的信息,所以可以优化为空间复杂度为O(n),但代码要复杂得一些。keep it simple,:-)

#include <iostream>
#include 
<fstream>

using namespace std;

ifstream fin(
"numtri.in");
ofstream fout(
"numtri.out");

#ifdef _DEBUG
#define out cout
#define in cin
#else
#define out fout
#define in fin
#endif

int tri[1000][1000];

void solve()
{
    
int r;
    
in>>r;
    
    
for(int i=0;i<r;++i){
        
for(int j=0;j<i+1;++j){
            
in>>tri[i][j];
        }
    }

    
//处理一下边界
    for(int i=1;i<r;++i){
        tri[i][
0]+=tri[i-1][0];
        tri[i][i]
+=tri[i-1][i-1];
    }

    
for(int i=2;i<r;++i){
        
for(int j=1;j<i;++j){
            tri[i][j]
+=max(tri[i-1][j-1],tri[i-1][j]);
        }
    }

    
int res = INT_MIN;

    
for(int i=0;i<r;++i){
        res 
= max(res,tri[r-1][i]);
    }

    
out<<res<<endl;
}

int main(int argc,char *argv[])
{
  solve();
  
return 0;
}



posted on 2009-06-12 22:23 YZY 阅读(994) 评论(0)  编辑 收藏 引用 所属分类: AlgorithmUSACO


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(2)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜