• SPOJ 4560 The Double HeLiX


    SPOJ_4560

        这个题目相当于将两个串个各分成了数量相等若干段,如果将对应的两小段看成一组,那么每组只能选其一累加,求最后的和最大是多少。因此可以用两个指针指向这两个数组,初始时两个指针都位于最左边,然后遍历这两个数组,如果某个指针指向的值较小,那么就累加这个这个值并使指针位置加1,当出现两个指针所指的值相等时,就说明遍历完成了一组,选择其中较大的累加即可。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 10010
    int N, M, a[MAXD], b[MAXD], suma, sumb;
    void init()
    {
        int i;
        for(i = 0; i < N; i ++)
            scanf("%d", &a[i]);
        a[N] = 100000;
        scanf("%d", &M);
        for(i = 0; i < M; i ++)
            scanf("%d", &b[i]);
        b[M] = 100000;    
    }
    int Max(int x, int y)
    {
        return x > y ? x : y;    
    }
    void solve()
    {
        int i, j, ans = 0;
        i = j = suma = sumb = 0;
        for(;;)
        {
            if(a[i] == b[j])
                ans += Max(suma, sumb), suma = sumb = a[i], ++ i, ++ j;
            else if(a[i] < b[j])
                suma += a[i], ++ i;
            else
                sumb += b[j], ++ j;
            if(i > N)
                break;
        }
        printf("%d\n", ans);
    }
    int main()
    {
        while(scanf("%d", &N), N != 0)
        {
            init();
            solve();    
        }
        return 0;    
    }
  • 相关阅读:
    小数的编程
    小数的编程
    硬币趣味题
    硬币趣味题
    好玩的 emoji
    ThreadPoolExecutor使用介绍
    希尔排序
    OpenCms创建站点过程图解——献给OpenCms的刚開始学习的人们
    Linux C 编程内存泄露检測工具(二):memwatch
    C++封装、继承、多态
  • 原文地址:https://www.cnblogs.com/staginner/p/2599783.html
Copyright © 2020-2023  润新知