【wikioi】2956-排隊問題
阿新 • • 發佈:2018-12-24
有N個學生去食堂,可教官規定:必須2人或3人組成一組,求有多少種不同分組的方法。
方法1:dp(和爬樓梯那貨一樣),公式:f[i]=f[i-2]+f[i-3];
方法2:DFS,比較慢。
#include <iostream> using namespace std; long long ans=0; long long temp_sum=0; long long dp(int n) { long long f[151]= {0}; f[2]=f[3]=1; for(int i=4; i<=n; i++) { f[i]=f[i-2]+f[i-3]; } return f[n]; } void dfs(int n) { if(temp_sum>n) return; if(temp_sum==n) { ans++; } else for(int i=2; i<=3; i++) { temp_sum+=i; dfs(n); temp_sum-=i; } } int main() { int n=20; cout << "DP " <<dp(n)<< endl; dfs(n); cout << "DFS " <<ans<< endl; return 0; }