测了几个样例,不知道对不对

//f[i][j]表示考虑前i个物品,两个背包的差值为j的情况下的最大重量和
//ans=f[n][0]/2 (即求出来的是最大的可能)
#include <bits/stdc++.h>
using namespace std;
int f[105][2005]; 
int w[105]; 

int main() {
    int n; cin>>n;
    for (int i=1; i<=n; i++) cin>>w[i];
    memset(f,-1,sizeof(f));
    f[0][0]=0;
    for (int i=1; i<=n; i++) {
        for (int j=0; j<=2000; j++) {
            if (f[i-1][j]!=-1) {
                f[i][j]=max(f[i][j],f[i-1][j]);
                if (w[i]>j) f[i][w[i]-j]=max(f[i][w[i]-j], f[i-1][j]+w[i]);
                else f[i][j-w[i]]=max(f[i][j-w[i]],f[i-1][j]+w[i]);
                f[i][j+w[i]]=max(f[i][j+w[i]],f[i-1][j]+w[i]);
            }
        }
    }
    if (f[n][0]>0) cout<<f[n][0]/2<<endl;
    else cout<<"Impossible"<<endl;
    return 0;
}