Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int INF = 1000000000;
  5. int teskes, m, s;
  6. int a[50], b[50];
  7.  
  8. int dp[44][311][311];
  9. int cc(int ke, int ca, int cb) {
  10.     if(dp[ke][ca][cb] != -1) {
  11.         return dp[ke][ca][cb];
  12.     }
  13.  
  14.     if(ca == 0 && cb == 0) {
  15.         return 0;
  16.     }
  17.  
  18.     if(ke >= m || ca < 0 || cb < 0) {
  19.         return INF;
  20.     }
  21.  
  22.     int pakai0 = cc(ke, ca-a[ke], cb-b[ke]) + 1;
  23.     int pakai1 = cc(ke+1, ca-a[ke], cb-b[ke]) + 1;
  24.     int pakai2 = cc(ke+1, ca, cb);
  25.     return dp[ke][ca][cb] = min(pakai0, min(pakai1, pakai2));
  26. }
  27.  
  28. int main() {
  29.     scanf("%d", &teskes);
  30.     while(teskes--) {
  31.         scanf("%d%d", &m, &s);
  32.         for(int i = 0; i < m; i++) {
  33.             scanf("%d %d", &a[i], &b[i]);
  34.         }
  35.  
  36.         int ans = INF;
  37.         for(int i = 1; i <= s; i++) {
  38.             for(int j = 1; j <= s; j++) {
  39.                 if(i * i + j * j == s * s) {
  40.                     memset(dp, -1, sizeof dp);
  41.                     ans = min(ans, cc(0, i, j));
  42.                 }
  43.             }
  44.         }
  45.         if(ans >= INF) {
  46.             printf("not possible\n");
  47.         } else {
  48.             printf("%d\n", ans);
  49.         }
  50.     }
  51.     return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement