tungggg

day con co tong bang S

May 14th, 2022
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. // https://www.hackerrank.com/contests/dsa-11-2021-quy-hoach-dong/challenges/dp-bai-4-day-con-co-tong-bang-s/copy-from/1344680688
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5.  
  6. #define ms(s,n) memset(s,n,sizeof(s))
  7. #define all(a) a.begin(),a.end()
  8. #define present(t, x) (t.find(x) != t.end())
  9. #define sz(a) int((a).size())
  10. #define FOR(i, a, b) for (int i = (a); i < (b); ++i)
  11. #define FORd(i, a, b) for (int i = (a) - 1; i >= (b); --i)
  12. #define pb push_back
  13. #define pf push_front
  14. #define fi first
  15. #define se second
  16. #define mp make_pair
  17. #define endl "\n"
  18.  
  19.  
  20. typedef long long ll;
  21. typedef unsigned long long ull;
  22. typedef long double ld;
  23. typedef pair<int,int> pi;
  24. typedef vector<int> vi;
  25. typedef vector<pi> vii;
  26.  
  27. const int MOD = (int) 1e9+7;
  28. const int INF = (int) 1e9+2804;
  29. inline ll gcd(ll a,ll b){ll r;while(b){r=a%b;a=b;b=r;}return a;}
  30. inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
  31.  
  32.  
  33.  
  34.  
  35.  
  36. int main(){
  37.     ios_base::sync_with_stdio(false);
  38.     cin.tie(NULL);
  39.    
  40.     ll n,S ;
  41.     cin >> n >> S ;
  42.     vector < ll > a(n+2,0);
  43.     bool f[n+2][S+2];
  44.     FOR(i,1,n+1) cin >> a[i];
  45.     for (int i=0;i<=n+1;i++){
  46.         for (int j=0;j<=S+1;j++) f[i][j]= false ;
  47.     }
  48.  
  49.     for (int i=0;i<=n+1;i++){
  50.         f[i][0]=true ;
  51.     }
  52.  
  53.     // dp
  54.     for (int i=1;i<=n;i++){
  55.         for (int j=1;j<=S;j++){
  56.            
  57.             f[i][j]=f[i-1][j];
  58.            
  59.             // can get a[i]
  60.             if  ( a[i]<=j ){
  61.                 if ( f[i-1][j-a[i]] ) f[i][j]=true ;
  62.             }
  63.  
  64.             // f[i][j] là lấy trạng thái chọn tập có tổng bằng j
  65.             // từ i-1 phần tử ban đầu nhưng bên dưới vẫn còn có
  66.             // câu lệnh để thay đổi trạng thái tại f[i][j]
  67.             // ví dụ f[i][j]= f[i-1][j] = false và câu lệnh dưới thoả mãn => f[i][j] != f[i-1][j]        
  68.         }  
  69.     }
  70.     cout << f[n][S];
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment