思路:
其实就是一个部分和(从a1,a2,a3…an中选取若干数,使得和为k)的变式,(相当于规定只能选多少个数)
代码:(有注释)
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std
;
int m
,n
,k
;
int a
[50];
bool
dfs(int i
,int sum
,int c
){
if(i
==n
|| c
==k
)
return sum
==m
;
if(dfs(i
+1,sum
,c
))
return true
;
if(dfs(i
+1,sum
+a
[i
],c
+1))
return true
;
return false
;
}
int main(){
scanf("%d%d%d",&m
,&n
,&k
);
for(int i
= 0;i
<n
;i
++)
scanf("%d",&a
[i
]);
if(dfs(0,0,0))
printf("Yes\n");
else
printf("No\n");
return 0;
}
转载请注明原文地址: https://yun.8miu.com/read-136260.html