POJ 1664

思路: dfs(apple, low, plate) 表示有apple个苹果没有放,每个盘子至少放low个, 还有plate个盘子没有放

 

统计:248k, 16ms, 1Y

 

#include <iostream> #define F(i,a,b) for (int i=a;i<=b;i++) using namespace std; int total, M, N; void dfs(int apple, int low, int plate) { if (plate == 1 && apple >= low) total ++; else { F(i,low, apple) dfs(apple - i, i, plate - 1 ); } } int main() { int T; cin >> T; F(t,1,T) { total = 0; cin >> M >> N; dfs(M, 0, N); cout << total << endl; } return 0; }

你可能感兴趣的:(POJ 1664)