之所以会做这道题目是这两天都在看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; }