zoukankan      html  css  js  c++  java
  • 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;    
    }
  • 相关阅读:
    js函数动态传参
    js 异步加载
    js 遍历
    安卓——implements——OnClickListener
    安卓——BroadcastReceiver
    关于Linux下的硬链接
    Linux 的文件类型
    linux 学习
    虚函数与重载函数的区别
    虚函数和友元
  • 原文地址:https://www.cnblogs.com/staginner/p/2599783.html
Copyright © 2011-2022 走看看