最后一题为啥超时了
#include<bits/stdc++.h>
using namespace std;
int a[510];
#define pii pair<int,int>
map<pii,int>pre;
map<pii,int>dp;int n,m;
void prin(int x,int y)
{
vector<int>aa,bb;
while(!(x==0&&y==0))
{
int k=pre[{x,y}];
if(k>0)
{
x-=k;
aa.push_back(k);
}
else {y+=k;bb.push_back(-k);}
//cout<<x<<' '<<y<<endl;
}
cout<<aa.size()<<' '<<bb.size()<<endl;
for(int i=0;i<aa.size();i++)
cout<<aa[i]<<' ';
cout<<endl;
for(int i=0;i<bb.size();i++)
cout<<bb[i]<<' ';
cout<<endl;
}
void prea()
{
int i,j,k;
for(i=1;i<=n;i++)cin>>a[i];
dp[{0,0}]=1;
for(i=1;i<=n;i++)
{
for(j=10000;j>=0;j--)
{
for(k=(j==0?10000:10000/j);k>=0;k--)
{
if(dp[{j,k}])continue;
if(j>=a[i]&&dp[{j-a[i],k}])
{
dp[{j,k}]=1;
pre[{j,k}]=a[i];
}
else if(k>=a[i]&&dp[{j,k-a[i]}])
{
dp[{j,k}]=1;
pre[{j,k}]=a[i]*(-1);
}
}
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
int i,j,k;
prea();
while(m--)
{
int q;
cin>>q;
int flag=0;
for(i=1;i*i<=q;i++)
{
if(q%i==0)
{
if(dp[{i,q/i}])
{
flag=1;
cout<<"Yes"<<endl;
prin(i,q/i);
}
if(flag)break;
}
if(flag)break;
}
if(!flag)cout<<"No"<<endl;
}
}
最后一题为啥超时了