萌新求问

P1118 [USACO06FEB] Backward Digit Sums G/S

~~打破0回复惨案~~
by Ryo_Yamada @ 2020-02-24 19:26:26


实践是检验真理的唯一标准
by zhangboju @ 2020-02-24 19:28:23


@[breeze末影](/user/242543) 实践出真知!
by gdjcwsk @ 2020-02-24 19:33:20


(这道题我过了
by Magia @ 2020-02-24 19:39:18


@[紫曦蒟蒻](/user/200060) 谁都知道
by Ryo_Yamada @ 2020-02-24 19:39:29


嗯……好吧差别有点大
by Ryo_Yamada @ 2020-02-24 19:41:07


此 贴 终 结
by Ryo_Yamada @ 2020-02-24 19:41:27


``` #include <cstdio> using namespace std; int n,sum; int visited[25]= {0}; int ans[25]; int pc[25]; int dfs(int i,int num,int v); int main(void) { scanf("%d%d",&n,&sum); pc[0]=pc[n-1]=1; if (n>1) for (int i=1; i*2<n; i++) pc[i]=pc[n-1-i]=(n-i)*pc[i-1]/i; if (dfs(0,0,0)) for (int i=1; i<=n; i++) printf("%d ",ans[i]); return 0; } int dfs(int i,int num,int v) { if (v>sum) return 0; if (i==n) { if (v==sum) { ans[i]=num; return 1; } else return 0; } visited[num]=1; for (int j=1; j<=n; j++) { if (!visited[j] && dfs(i+1,j,v+pc[i]*j)) { ans[i]=num; return 1; } } visited[num]=0; return 0; } ```
by lichangzhou_123 @ 2020-02-25 16:20:17


参考
by lichangzhou_123 @ 2020-02-25 16:20:27


|