QBSEQ - Dãy con dài nhất có tổng chia hết cho K
Giới hạn
- Thời gian: 0.194s
- Bộ nhớ: 1536MB
- Mã nguồn: 50000 bytes
Cho một dãy gồm n ( n <= 1000) số nguyên dương A 1 , A 2 , ..., A n và số nguyên dương k (k <= 50). Hãy tìm dãy con gồm nhiều phần tử nhất của dãy đã cho sao cho tổng các phần tử của dãy con này chia hết cho k.
Input
Dòng đầu tiên chứa hai số n, k ghi cách nhau bởi ít nhất 1 dấu trống.
Các dòng tiếp theo chứa các số A 1 , A 2 , ..., A n được ghi theo đúng thứ tự cách nhau ít nhất một dấu trống hoặc xuống dòng
Output
Gồm 1 dòng duy nhất ghi số lượng phần tử của dãy con dài nhất thoả mãn
Example
Input:
10 3
2 3 5 7
9 6 12 7
11 15
Output:
9
- Người up: cun
- Nguồn bài: Lê Minh Hoàng
Lời giải:
#include<bits/stdc++.h>
using namespace std;
int n,k,i,x,a[101010],j;
int main(){
cin>>n>>k;
for(i=0;i<n;i++){
cin>>x;
a[i]=x%k;
}
vector<int> f(k,INT_MIN),g(k);
f[0]=0;
for(i=0;i<n;i++){
for(j=0;j<k;j++) g[j]=max(f[j],f[(j-a[i]+k)%k]+1);
f.swap(g);
}
cout<<f[0];
return 0;
}