PAT 1068. Find More Coins

来源:互联网 发布:2016欧洲杯网络直播权 编辑:程序博客网 时间:2024/05/21 07:00

一看到“M(<=102, the amount of money Eva has to pay)”就两眼冒绿光了有没有啊,空间时间复杂度都大大缩小了。本来有点想背包,一看输出还要求output the smallest sequence,就干脆深搜了。深搜层数不会超过100层,时间复杂度……时间复杂度我算不出来,哪个大大能告诉我的话感激不尽。这样一想都点挂汗啊,说不定测试数据凶一点我就过不掉了。

#include<cstdio>#include<iostream>using namespace std;int coin[105]={0};int target;struct road{int r[105],step,sum;road(){step=sum=0;}void oupu(){for(int i=0;i<step;i++)if(i<step-1)printf("%d ",r[i]);elseprintf("%d\n",r[i]);}void add(int x){r[step++]=x;sum+=x;}void dele(){if(step<=0)return;step--;sum-=r[step];}};bool func(struct road ro){if(ro.sum>target)return false;if(ro.sum==target){ro.oupu();return true;}int i;for(i=0;i<=target;i++){if(coin[i]>0){coin[i]--;ro.add(i);if(func(ro))return true;ro.dele();coin[i]++;}}return false;}int main(){int n,v;scanf("%d%d",&n,&target);while(n--){scanf("%d",&v);if(v<=target)coin[v]++;}road ro;if(!func(ro))printf("No Solution\n");return 0;}


0 0
原创粉丝点击