Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int INF = 1000000000;
- int teskes, m, s;
- int a[50], b[50];
- int dp[44][311][311];
- int cc(int ke, int ca, int cb) {
- if(dp[ke][ca][cb] != -1) {
- return dp[ke][ca][cb];
- }
- if(ca == 0 && cb == 0) {
- return 0;
- }
- if(ke >= m || ca < 0 || cb < 0) {
- return INF;
- }
- int pakai0 = cc(ke, ca-a[ke], cb-b[ke]) + 1;
- int pakai1 = cc(ke+1, ca-a[ke], cb-b[ke]) + 1;
- int pakai2 = cc(ke+1, ca, cb);
- return dp[ke][ca][cb] = min(pakai0, min(pakai1, pakai2));
- }
- int main() {
- scanf("%d", &teskes);
- while(teskes--) {
- scanf("%d%d", &m, &s);
- for(int i = 0; i < m; i++) {
- scanf("%d %d", &a[i], &b[i]);
- }
- int ans = INF;
- for(int i = 1; i <= s; i++) {
- for(int j = 1; j <= s; j++) {
- if(i * i + j * j == s * s) {
- memset(dp, -1, sizeof dp);
- ans = min(ans, cc(0, i, j));
- }
- }
- }
- if(ans >= INF) {
- printf("not possible\n");
- } else {
- printf("%d\n", ans);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement