该题搜索加微弱剪枝(极限剪枝的一半)就能过(2760ms) 附代码
#include<bits/stdc++.h>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
//#define connect(ax,bx) (string)(ax)+(string)(bx)
using namespace std;
int m,r,n;
int mmap[10001];
bool bmmap[10001];
int dfs(int f,int m2,int j)
{
if(f>=r)
{
if(m2>n)return 1;
return 0;
}
int t=0;
for(int i(j+1);i<=m-r+1+f;i++)
{
if(bmmap[i]==0)
{
bmmap[i]=1;
t+=dfs(f+1,m2+mmap[i],i);
// if(t==t1)break;
// t1=t;
bmmap[i]=0;
}
}
return t;
}
int main()
{
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0);
cin>>m>>r>>n;
for(int i(1);i<=m;i++)cin>>mmap[i];
sort(mmap+1,mmap+m+1);
cout<<dfs(0,0,0);
return 0;
}
//register
//\n %d
//========================================
建议缩短时间或加强数据或降红题