搜索训练——取数字
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 20 Solved: 16
[ Submit][ Status][ Web Board]
Description
给你n个数字,问能否从中取一些数字出来,使得取出来的数字的和为K
Input
第一行输入n(n<10)和K
第二行输入n个数字
Output
如果可以 输出yes
否则输出no
Sample Input
5 3
1 1 1 1 1
5 100
12 62 1564 897 1223
Sample Output
yes
no
HINT
Source
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<queue>
#include<cmath>
using namespace std;
int n,m,flag,i,j,k;
int s[100],ans[100];
void dfs(int t)
{
if(t==n)
{
int sum=0;
for(i=0;i<n;i++)
if(ans[i]==1)sum+=s[i];
if(sum==m)flag=1;
return;
}
ans[t]=1;dfs(t+1);
if(flag==1)return;
ans[t]=0;dfs(t+1);
if(flag==1)return;
}
int main()
{
while(cin>>n>>m)
{
for(i=0;i<n;i++)
cin>>s[i];
flag=0;
dfs(0);
if(flag)cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}
一下代码,目前看不懂啊。。。。
#include<stdio.h>
int main(){
int n,m,A[100],i,s,sum;
while(~scanf("%d%d",&n,&m)){
int ans=0;
for(i=0;i<n;i++) scanf("%d",&A[i]);
for(s=0;s<(1<<n);s++){
for(i=sum=0;i<n;i++) if(s>>i&1) sum+=A[i];
ans|=(sum==m);
}
printf("%s\n",ans?"yes":"no");
}
return 0;
}