0089:The Shortest Path on A Rhombic Path

問題文
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0089













動的計画法で解いた。
dp[ i行目 ][ j列目 ]:=最大コスト

とすると、i行目のj列目にはi-1行目の同じj列と
i<=N/2 のとき i-1行目のj-1列目
i>N のとき i-1行目のj+1列目 (Nは行数)
から来れるので、この2ヶ所までのパスの最大コスト+i行j列の値 という式で計算できる。

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>

using namespace std;

int main(void){
  int in=0,l=0;
  string s;
  vector<int>v[101];

  while(getline(cin,s)){
    for(int i=0;i<=s.size();i++){
      if(s[i]==',' || i==s.size())v[l].push_back(in),in=0;
      else if(s[i]!=',')in*=10,in+=s[i]-'0'; 
    }
    l++;
  }

  int dp[101][101];

  fill(dp[0],dp[101],0);
   dp[0][0]=v[0][0];

  for(int i=1;i<l;i++){
    for(int j=0;j<v[i].size();j++){
      dp[i][j]=dp[i-1][j]+v[i][j];
      if(i<=l/2 && j)dp[i][j]=max(dp[i][j],dp[i-1][j-1]+v[i][j]);
      if(i>l/2)dp[i][j]=max(dp[i][j],dp[i-1][j+1]+v[i][j]);
    }
  }
  cout << dp[l-1][0] << endl;

  return 0;
}