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分!
求大佬帮助!