Chủ Nhật, 27 tháng 1, 2019

Một bài dp hay

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 , A , ..., A 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 , A , ..., A đượ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;
}

Bài G - Educatioal Round 62

Đề bài: Bạn được cho 1 đồ thị vô hướng đặc biệt. Nó bao gồm $2n$ đỉnh được đánh số từ 1 đến 2n. Dưới đây là một số đặc tính của đồ thị: + ...