poj-3187-Backward Digit Sums

来源:互联网 发布:直播特效声音软件 编辑:程序博客网 时间:2024/06/18 12:19

题意:O-

思路:直接dfs回溯,我第一次直接过了样例,但是wa了。我很是不解,试了多组简单数据都正确,后面请教了学长才发现错误所在。

只能说我RP太好,样例总是能过。

代码附上:

#include <cstdio>#include <cstring>#include <cctype>#include <iostream>#include <queue>#include <cmath>#include <algorithm>#define FIN freopen("input.txt","r",stdin)using namespace std;typedef long long ll;typedef pair<int,int>P;const int MAX = 30;const int INF=0x3f3f3f3f;int n,flag,k;int vis[MAX],rec[MAX],ans[MAX];int calc(int la){  //get到小细节  memcpy(rec,ans,sizeof(ans));         //这个就是错误所在,之前没加一直wa,后面发现rec计算一次之后就会全变,但是样例不知怎么没影响  while(la>1){    for(int i=0;i<la-1;i++){      rec[i]=rec[i]+rec[i+1];    }    la--;  }  return rec[0];}void dfs(int cnt){  if(cnt==n&&calc(n)==k){    for(int i=0;i<n;i++) printf("%d%c",ans[i],i==n-1?'\n':' ');    flag=1;    return ;  }  else if(cnt<n) for(int i=1;i<=n;i++){    if(!vis[i]) {      vis[i]=1;      rec[cnt]=i;      ans[cnt]=i;      dfs(cnt+1);      if(flag) return ;      vis[i]=0;    }  }}int main(){  //FIN;  while(~scanf("%d%d",&n,&k)){    memset(vis,0,sizeof(vis));    flag=0;    dfs(0);  }  return 0;}

0 0
原创粉丝点击