您的位置:首页 > 其它

poj——3176

2015-06-18 13:03 232 查看
#include <iostream>
#include<cstdio>
#include<cstdlib>
//#include<memory.h>
#include<string.h>
#include<algorithm>
using namespace std;
int s[360][360];

int dfs(int x,int y,int n)
{
//cout<<endl<<x<<"->"<<y<<endl;
int res=0;
if(x==n)
{
return 0;
}
else
{
res= max(dfs(x+1,y,n)+s[x][y],dfs(x+1,y+1,n)+s[x][y]);
}
return res;
}

int main()
{
int n,i,j,result;
scanf("%d",&n);
memset(s,-1,sizeof(s));
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)

cin>>s[i][j];
}
result=dfs(0,0,n);
cout<<result<<endl;

}


  此题直接用深搜会超时, 贴上代码

但是用“记忆化搜索则会解决这个问题”;继续贴上ac代码

#include <iostream>
#include<cstdio>
#include<cstdlib>
//#include<memory.h>
#include<string.h>
#include<algorithm>
using namespace std;
int s[360][360];
int dp[360][360];

int dfs(int x,int y,int n)
{
//cout<<endl<<x<<"->"<<y<<endl;
if(dp[x][y]>=0)
{
return dp[x][y];
}
int res=0;
if(x==n)
{
return 0;
}
else
{
dp[x][y]= max(dfs(x+1,y,n)+s[x][y],dfs(x+1,y+1,n)+s[x][y]);
res=dp[x][y];
}
return res;
}

int main()
{
int n,i,j,result;
//while(scanf("%d",&n)!=EOF){
scanf("%d",&n);
memset(s,-1,sizeof(s));
memset(dp,-1,sizeof(dp));
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)

cin>>s[i][j];
}
result=dfs(0,0,n);
cout<<result<<endl;//}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: