1131: Unit Fraction Partition
問題文
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1131&lang=jp
解き直し。
y/x+1/z=(yz+x)/xz
だから、これを使って探索。枝刈りはしなくても通る。
#include<iostream> #include<vector> #include<algorithm> using namespace std; int p,q,a,n; int rec(int x,int y,int now,int dep){ if(x*p==q*y)return 1; if(dep==0)return 0; int sum=0; for(int z=now;z*x<=a;z++){ if(y/x+1/z<=p/q)sum+=rec(z*x,z*y+x,z,dep-1); } return sum; } int main(void){ while(cin >> p >> q >> a >> n,p|q|a|n){ cout << rec(1,0,1,n) << endl; } return 0; }