最后一题为啥超时了

#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;

}

}

最后一题为啥超时了

全部评论

相关推荐

06-12 10:50
门头沟学院 Java
你的不定积分没加C:我怎么在学院群看到了同样的话
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务