2019.1.25数字三角形求最大和,HDOJ-2084(递归)

上午一直在看别人的博客,看不懂,头疼,大神们都不写注释吗?
想了解一下动态规划和记忆化搜索,找到了这篇博文,费了半天劲大概把代码看懂了
数字三角形——递归、递推、记忆化搜索

在这里插入图片描述
第一个数据为正整数n,表示这组数据有n行,接下来是一组数字三角形
看完了递归做法,想自己手敲一下

真是费劲啊

#include<stdio.h>
int max(int x,int y);
int fun(int a,int b);
int tree[500][500],n;
int main(void)
{
	while(scanf("%d",&n)!=EOF){//一共n行 
		int i,j;
		for(i=1;i<=n;i++)
			for(j=1;j<=i;j++){//第i行有i个数字 
				scanf("%d",&tree[i][j]);//读取三角形所有数据,第i行第j个数据 
			}
		
		printf("%d\n",fun(1,1));
	}
	return 0;
}

int max(int x,int y);//比较两个数大小并返回较大的那个数 
inline  int max(int x,int y)
{
	int ret;
	ret=(x>y)?x:y;
	return ret;
}

int fun(int a,int b)
{
	return tree[a][b]+(a==n?0:max(fun(a+1,b),fun(a+1,b+1)));//穷举出所有分支,并从三角形底部处挑出较大的数字加上它的分支点数字,一直回推 
}

我还是头一次把int变量声明写在main函数外,不这样做的话,fun()函数会报错。
写了有半个小时左右?之前看着真的费劲
我还是头一次费这么大力气研究递推和递归
等有空了再去看这篇博客,感觉写的很棒,不过有些地方有点小疑问
夜深人静写算法(二) - 动态规划

2019年1月25日14点23分

emm,今天在航电上水题,似乎又碰到这道题了……

题目 HDOJ-2084

#include<cstdio>
#include<iostream>
using namespace std;
int tower[100][100];
int dp[100][100];
int maxi(int a,int b);
int main()
{
	int c;
	cin>>c;
	while(c--){
		int n,i,j;
		cin>>n;
		for(i=0;i<n;i++)
			for(j=0;j<=i;j++)
				cin>>tower[i][j];
		dp[0][0]=tower[0][0];
		for(i=1;i<n;i++)
			for(j=0;j<=i;j++){
				if(j==0)
					dp[i][j]=dp[i-1][j]+tower[i][j];
				else if(i==j)
					dp[i][j]=dp[i-1][j-1]+tower[i][j];
				else
					dp[i][j]=maxi(dp[i-1][j]+tower[i][j],dp[i-1][j-1]+tower[i][j]);

			}
		int m=dp[n-1][0];
		for(i=1;i<n;i++)
			if(m<dp[n-1][i])
				m=dp[n-1][i];
		cout<<m<<endl;
	}
	return 0;
}
int maxi(int a,int b)
{
	return (a>b)?a:b;
}

凭着感觉乱写的一个假DP,不过AC了……

Run IDSubmit TimeJudge StatusPro.IDExe.TimeExe.MemoryCode Len.LanguageAuthor
293976682019-06-07 09:03:43Accepted2084171MS1880K699 BC++Overstars
293976662019-06-07 09:02:16Wrong Answer2084171MS1872K695 BC++Overstars

2019年6月7日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值