运动会

运动会(group)
【问题描述】
在一次运会上,有一个比赛项目,共有 N 个人参加比赛,要将这 N 个人分组,每组人
数不少于 K 个,问有多少种分组方式?
比如有 16 个运动员,每组人数不少于 5 个,共有 6 种分组方式:
(1) 分一组,为 16 人;
(2) 分二组,分别为 11 人、5 人;
(3) 分二组,分别为 10 人、6 人;
(4) 分二组,分别为 9 人、7 人;
(5) 分二组,分别为 8 人、8 人;
(6) 分三组,分别为 6 人、5 人、5 人。
注意:6+5+5,5+6+5,5+5+6 为同一种,只算一种分组方式;
【输入文件】
输入文件 group.in 共一行为两个整数 N, K。表示有 N 个运动员分组,每组不少于 K 个
人(1 ≤ K ≤ N ≤ 500)。
【输出文件】
输出文件 group.out 共一行为一个整数,表示分组数。
结果可能很大,输出结果除以 10000007 的余数。
【输入】
16 5
【输出】
6

 

记忆化搜索 。。。

#include <cstdio>
#include <iostream>
using namespace std;
#define R register
#define ll long long
ll n,k;
ll f[505][505];
inline ll dfs(ll yu,ll last)
{
    if(f[yu][last]) return f[yu][last];
    ll sum=1;
    for(R ll i=last;i<=n;i++) 
    {
        if(yu>=2*i) sum+=dfs(yu-i,i),sum%=10000007;
    }
    sum%=10000007;
    return f[yu][last]=sum;
}
int main()
{
    freopen("group.in","r",stdin);
    freopen("group.out","w",stdout);
    cin>>n>>k;
    cout<<dfs(n,k)<<endl;
    return 0;
}

好短....

转载于:https://www.cnblogs.com/000226wrp/p/11336103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值