题目链接(组合版)链接
题目大意:略。
解题思路:此方法仅限于输出组合情况,计数的话会TLE。
附加题目(计数版):链接
AC 代码(组合版)
#include<bits/stdc++.h> #include<cmath> #define mem(a,b) memset(a,b,sizeof a) #define INF 0x3f3f3f3f using namespace std; typedef long long ll; int a[40],k,n,num,sum; void dfs(int x) { if(sum==n) { k++; printf("%d=%d",n,a[0]); for(int i=1;i<num;i++) printf("+%d",a[i]); if(num==1 || k%4==0) puts(""); else printf(";"); return; } for(int i=x;i<=n;i++) { if(sum>n) return; // 此行代码比放在for外面要好得多 a[num++]=i; sum+=i; dfs(i); sum-=i; num--; } } int main() { while(~scanf("%d",&n)) { num=sum=k=0; dfs(1); } return 0; }