题目大意
按升序排列打印所有满足以下条件的长度为 N 的整数序列。
- 第 i 个元素介于 1 和 Ri 之间。
- 所有元素之和是 K 的倍数。
数据范围
- 1≤N≤8
- 2≤K≤10
- 1≤Ri≤5
思路解析
因为题目中的N和 Ri 都很小,直接暴力搜索1~N就好了。
AC code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include<bits/stdc++.h> using namespace std; int n,k,r[100010],b[1000010]; void dfs(int u,int sum=0){ if(u==n+1){ if(sum%k!=0) return; for(int i=1;i<u;i++) cout<<b[i]<<' '; cout<<endl; return; } for(int i=1;i<=r[u];i++){ b[u]=i; dfs(u+1,sum+i); b[u]=0; } } int main(){ cin>>n>>k; for(int i=1;i<=n;i++) cin>>r[i]; dfs(1); return 0; }
|