• HDU 5783 Divide the Sequence


    题意:求一个序列的分段个数,使得每一段的前缀和为0;

    分析:如果正向思维,那么解法是从前往后遍历,每遇到一个负数就向前遍历直到>=0(这样贪心保证了序列尽可能多),但是这样最坏的情况是n^2的,所以要逆过来来考虑,每遇到负数就向前加到>=0即可,然后边统计答案,在n的算法里计算出。(注意:前缀和可能超int,用long long 保存)

    输入:

    6
    1 2 3 4 5 6
    4
    1 2 -3 0
    5
    0 0 0 0 0

    输出:

    6
    2
    5

    code:

    #include <bits/stdc++.h>

    using namespace std;

    typedef long long ll;

    const int N=1e6+6;

    ll v[N];

    int main()

    {

          int n;

          while (~scanf("%d",&n)){

               for (int i=0;i<n;i++) scanf("%lld",v+i);

               ll s=0,ans=0;

               for (int i=n-1;i>=0;i--){

                     s+=v[i];

                     if (s>=0) {ans++;s=0;}

               }

               cout<<ans<<endl;

          }

    }

  • 相关阅读:
    Vue props向子组件中传递数据
    Vue 组件间的通信
    vue slot插槽
    Vue 组件化注意事项
    VUE多个组件示例
    Vue组件化开发
    Vue 获取当前时间并格式化
    VUE 过滤器以及插件
    Vue 表单数据双向绑定 v-mode
    VUE 事件修饰符以及按键码
  • 原文地址:https://www.cnblogs.com/137033036-wjl/p/5745842.html
Copyright © 2020-2023  润新知