第一场组队赛里只A了两题A和B,一道简单搜索一道经典模型的模拟题。
赛后过了C,正在努力做G。
A题:
给出一个数s要求找出用k个不同且小与等于n的数组成s的解的个数,简单DFS,从小到大搜索,标记数组都不需要。
#include<cstring>
#include<string>
#include<fstream>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cctype>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<stack>
#include<ctime>
#include<cstdlib>
#include<functional>
#include<cmath>
using namespace std;
#define PI acos(-1.0)
#define MAXN 100005
#define eps 1e-7
#define INF 0x7FFFFFFF
#define ff sqrt(5.0)
typedef long long ll;
int n,k,s;
int ans;
void dfs(int aa,int p,int sum){
if(p==k){
if(sum==s){
ans++;
}
return ;
}
if(p>k) return ;
if(sum>s) return ;
for(int i=aa+1;i<=n;i++)
{
dfs(i,p+1,sum+i);
}
}
int main(){
int i,j;
while(scanf("%d%d%d",&n,&k,&s)!=EOF){
if(n==0||k==0||s==0) break;
ans = 0;
for(int i=1;i<=n;i++){
dfs(i,1,i);
}
printf("%d\n",ans);
}
return 0;
}
B题模拟&#