laolin2333


私信TA

用户名:laolin2333

访问量:8527

签 名:

前路漫漫

等  级
排  名 2477
经  验 2286
参赛次数 3
文章发表 6
年  龄 0
在职情况 学生
学  校 华师大
专  业 挖掘机

  自我简介:

解题思路:

这其实动态规划算法的一道 入门入门入门 级的题,又称为数塔。解法就是从下往上,两两比较,以样例为例。最下面的

4 5 2 6,先4和5比较,二者间大的数与上面的2相加。依次类推。

比较规整的代码链接:http://paste.ubuntu.com/26087872/(其实是我不知道怎么贴好点)




注意事项:

不要用递归!



参考代码:

#include <stdio.h>

#include <string.h>


int Max(int a, int b)

{

    if(a > b)

        return a;

    else

        return b;

}


int main(void)

{

    int n,i,j,m;

    int num[105][105]={0};

    int dp[105][105]={0};


    scanf("%d",&n);

    while(n)

    {

        scanf("%d",&m);

        for(i=0; i<m; i++)

        {

            for(j=0; j<=i; j++)

            {

                scanf("%d",&num[i][j]);

            }

        }

        for(j=0; j<m; j++)

        {

            dp[m-1][j] = num[m-1][j];

        }

        for(i=m-2; i>=0; i--)

        {

            for(j=0; j<=i; j++)

            {

                dp[i][j]=Max(dp[i+1][j],dp[i+1][j+1])+num[i][j];

            }

        }

        printf("%d\n",dp[0][0]);

        memset(num,0,sizeof(num));

        memset(dp,0,sizeof(dp));

        n--;

    }

    return 0;

}


 

0.0分

6 人评分

  评论区

#include<stdio.h>

int max (int a, int b) {
    return a>b? a:b;
}

int main () {
    int n;
    scanf("%d", &n);
    while (n) {
        int num[100][100];
        int lineNum, i, j;
        scanf("%d", &lineNum);
        for(i = 0; i < lineNum; i ++) {
            for(j = 0; j < i+1; j ++) {
                scanf("%d", &num[i][j]);
            }
        }
        for(i = lineNum-2; i >= 0; i --) {
            for(j = 0; j <= i; j ++) {
                num[i][j] += max(num[i+1][j], num[i+1][j+1]);
            }
        }
        printf("%d\n", num[0][0]);
        n--;
    }

    return;
}
2021-03-09 19:34:06
#include<stdio.h>
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int N,i;
		int a[10000];
		int n1;
		scanf("%d",&N);
		n1 = (N+1)*N/2;
		for(i=1;i<=n1;i++){
			scanf("%d",&a[i]);
		}
		int sum=0,k=1,sta=1;
		while(k<=N){
			int t=0;
			for(i=sta;i<sta+k;i++){
				if(a[i]>t){
					t=a[i];
				}
			}
			sum+=t;
			sta = sta+k;
			k=k+1;
		}
		printf("%d\n",sum);
	}
	return 0;
}
按照样例输入 得出 36
不知道哪里想错了
2019-03-16 20:24:17
  • «
  • 1
  • »