2956 排队问题
时间限制: 1 s
空间限制: 32000 KB
题目等级 : 黄金 Gold
题目描述 Description
有N个学生去食堂,可教官规定:必须2人或3人组成一组,求有多少种不同分组的方法。
输入描述 Input Description
一个数,N
输出描述 Output Description
一个数,即答案。
样例输入 Sample Input
6
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
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; }
TLE 5个点
时间: 2024-12-12 08:07:18