7-37 整數分解為若干項之和(20 分)
阿新 • • 發佈:2018-12-29
題目連結(組合版):點選開啟連結
題目大意:略。
解題思路:此方法僅限於輸出組合情況,計數的話會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; }