问题标题: 酷町堂:3602 买甜点

0
0
已解决
袁瑞琳
袁瑞琳
中级守护
中级守护

3602   买甜点

经验值:400 时间限制:1000毫秒

题目描述 Description

小明的好朋友小红来找他了,小明非常快开心,决定请小红去吃她最爱吃的甜点,小红心想这次终于可以好好坑坑小明了,现在商店里面有m种甜点,每种甜点ai元,小明其实只想花n元的,于是他让小红从这m种甜点种选出r种,现在请你帮小红想想,她该怎么选择这r种甜点,最后的总价格会超过n元。

输入描述 Input Description

第1行:三个数 m,r,n。

第2行:m个数,每种甜点需要的钱ai,两个数之间有空格。

输出描述 Output Description

只有一个整数,表示方案总数。

样例输入 Sample Input

5 2 8

1 7 2 5 4

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

m≤30,r≤m,m≤ai≤90, n≤2700

/*













*/
#include <iostream>
using namespace std;
int n,r,m,a[35],ans;
bool vis[35];
void dfs(int pos,int sum,int id)//当前选了pos-1个甜点,总价格是sum,从id开始枚举
{
//  if(sum>m)
//  {
//      ans++;
//      return ;
//  }//不管有没有选满r个,只要总价超过了M,就结束
    if(pos>r)
    {
        if(sum>m)
        {
            ans++;
        }
        return ;
    }//选了r个
    for(int i=id;i<=n;i++)
    {
        if(!vis[i])
        {
            vis[i]=true;
            dfs(pos+1,sum+a[i],i+1);
            vis[i]=false;
        }
    }//填数
    return ;
}
int main()
{
    cin>>n>>r>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    dfs(1,0,1);
    cout<<ans;
    return 0;
}

TLE 90分!

求大佬帮助!


1
已采纳
张恩泽
张恩泽
高级天翼
高级天翼

这题范围不大,应该可以直接枚举

我要回答