子序列问题

最长子序列

  1. 求最长子序列,满足和是一个数的倍数。
    题目链接
#include<bits/stdc++.h>
#define ll long long 
#define N 100005
int inf = 0x3f3f3f3f;
using namespace std;
ll n, k, a[N];
int main (){ 
    cin >> n >> k;  //N个数,所求序列和是K的倍数 

    for(int i = 1; i <= n; i++){    //读入数据 
        cin >> a[i];
    }

    int ans = 0;    //答案 
    for(int i = 1; i <= n; i++){
        if(n - i + 1 < ans)     //简单的n方复杂度不行,在这里加个判断
            break;              //如果后面的序列长度小于ans,就直接退出。 
        ll sum = 0;
        for(int j = i; j <= n; j++){    
            sum += a[j];    
            if(sum % k == 0){
                ans = max(ans, j - i + 1);
            }
        }
    }
    cout << ans <<endl;
    return 0;  
}  

猜你喜欢

转载自blog.csdn.net/henuyh/article/details/79966363