1163The Triangle

之所以会做这道题目是这两天都在看dp,到网上搜到一些关于dp的题目。

但是我第一次看这道题时,脑海里第一个想法就是我被坑了,这明明是搜索的题目,所以也按照自己的想法去做,结果超时了,这个可以理解

到网上寻找了一些答案,神了,真的可以用dp来做。

#include<iostream>
#include<algorithm>
using namespace std;
int dp[101][101];
int main()
{  int n;
    cin>>n;
    int maxn=0;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=i;++j)
            {cin>>dp[i][j];
               dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]);
             }
    cout<<*max_element(dp[n],dp[n]+n)<<endl;
    return 0;
}

顺便也贴上我的代码,不过超时了

#include "iostream"
using namespace std;

int best=0,n,table[300][300];
int total;

void count(int x,int y){
  if(x>=n){
     if(best<total)best=total;
     return;
  }
  total+=table[x+1][y-1];
  count(x+1,y-1);
  total=total-table[x+1][y-1]+table[x+1][y+1];
  count(x+1,y+1);
  total=total-table[x+1][y+1];
}

int main(){
  int i,temx,temy,s,j,k;
  cin>>n;
  s=n;
  temy=1;
  for(i=1;i<=n;i++,s--){
    for(j=s,k=0;k<i;k++,j=j+2){
      cin>>table[i][j];
    }
  }
  total=table[1][n];
  count(1,n);
  cout<<best<<endl;
}

 

 

 

posted @ 2013-08-13 16:17  龙城星  阅读(166)  评论(0编辑  收藏  举报