有N个学生去食堂,可教官规定:必须2人或3人组成一组,求有多少种不同分组的方法。
一个数,N
一个数,即答案。
6
2
N<=150
递推
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; long long n,f[11000]; long long read() { long long x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) ch=getchar(); while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘; ch=getchar();} return x*f; } int main() { n=read(); f[2]=f[3]=1; for(int i=4;i<=n;i++) f[i]=f[i-2]+f[i-3]; printf("%lld",f[n]); return 0; }
dfs
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; long long n,ans; long long read() { long long x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘) ch=getchar(); while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘; ch=getchar();} return x*f; } void dfs(int k) { if(k>n) return; if(k==n) {ans++; return;} dfs(k+2);dfs(k+3); } int main() { n=read(); dfs(0); printf("%lld",ans); return 0; }
原文:http://www.cnblogs.com/z360/p/7593895.html