Advertisement
STEFAN_STOYANOV

3097 Resto

Oct 19th, 2021
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.16 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int const maxn=128;
  4. int s,n,m,a[maxn*2],suma;
  5. short dp[maxn*2][maxn*maxn];
  6. void read()
  7. {
  8.     scanf("%d%d",&s,&n);
  9.     for(int i=1;i<=n;i++)
  10.     {
  11.         scanf("%d",&a[i]);
  12.         suma+=a[i];
  13.     }
  14.     scanf("%d",&m);
  15.     for(int i=n+1;i<=n+m;i++)
  16.     {
  17.         scanf("%d",&a[i]);
  18.         a[i]*=(-1);
  19.     }
  20. }
  21. void solve()
  22. {
  23.     int cur;
  24.     for(int i=0;i<=n+m;i++)
  25.         dp[i][0]=1;
  26.     cout<<"passed first for\n";
  27.     for(int i=1;i<=n+m;cout<<"passed i: "<<i<<endl,i++)
  28.         for(int j=1;j<=suma;cout<<"passed j: "<<j<<endl,j++)
  29.     {
  30.         dp[i][j]=dp[i-1][j];
  31.         cur=a[i];
  32.         if(-1<j-a[i]&&j-a[i]<=suma)dp[i][j]=max(dp[i-1][j-a[i]],dp[i][j]);
  33.     }
  34.     cout<<"solve passed\n";
  35. }
  36. int main()
  37. {
  38.     read();
  39.     solve();
  40.     if(dp[n+m][s])
  41.     {
  42.         int i=n+m,j=s;
  43.         while(i>0&&j>0)
  44.         {
  45.             if(dp[i][j])
  46.             {
  47.                 if(a[i]>0)printf("+%d ",a[i]);
  48.                 else printf("%d ",a[i]);
  49.             }
  50.             else break;
  51.             j-=a[i];
  52.             i--;
  53.         }
  54.     }
  55.     else printf("Impossible\n");
  56. return 0;
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement