部分と問題(入門問題)(c++とc)(簡単な検索)
( )
:
1000 ms | :
65535 KB
:
0
-
n (a1,a2,a3.......an) , k, "YES", "NO"。
:n<20;
a1+a2+....an int .
n,k n a1 a2 ...... an
k "YES"; "NO".
5 6
2 3 5 2 1
3 6
2 3 9
サンプル YES
NO
C++で きます.
#include using namespace std; int n,k; int a[10009]; int gg(int i,int sum) { if(sum>k)// return 0; if(i==n) return sum==k?1:0; if(gg(i+1,sum))// return 1; if(gg(i+1,sum+a[i])) return 1; return 0; } int main() { while(cin>>n>>k) { int i; for(i=0;i>a[i]; if(gg(0,0)) cout<
C ;
#include
int n,k;
int a[10009];
int gg(int i,int sum)
{
if(sum>k)
return 0;
if(i==n)
return sum==k?1:0;
if(gg(i+1,sum))
return 1;
if(gg(i+1,sum+a[i]))
return 1;
return 0;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
int i;
for(i=0;i scanf("%d",&a[i]);
if(gg(0,0))
printf("YES
");
else
printf("NO
");
}
return 0;
}
return 0;
a1、a2、.......an, , K。
-
-
,n k,n ,k 。
n 。
(1<=n<=20, int )
-
-
k, “YES”, , “NO”
-
-
4 13
1 2 4 7
-
-
YES
2 4 7
C ;
#include
#include
#include
using namespace std;
stacks;
int n,k,a[1000];
int gg(int i,int sum)
{
if(sum>k)
return 0;
if(i==n)
return sum==k;
if(gg(i+1,sum))
return 1;
if(gg(i+1,sum+a[i]))
{
s.push(a[i]);
return 1;
}
return 0;
}
int main()
{
int i;
while(~scanf("%d%d",&n,&k))
{
for(i=0;i scanf("%d",&a[i]);
if(gg(0,0))
{
printf("YES
");
int flag=1;
while(!s.empty())
{
printf(flag==1?"%d":" %d",s.top());
s.pop();
flag=0;
}
printf("
");
}
else
printf("NO
");
}
return 0;
}
-
-
-
C++ ;
-
-
#include
#include
using namespace std;
int n,k,a[100000];
stacks;
int gg(int i,int sum)
{
if(sum>k)
return 0;
if(i==n)
return sum==k;
if(gg(i+1,sum))
return 1;
if(gg(i+1,sum+a[i]))
{
s.push(a[i]);
return 1;
}
return 0;
}
int main()
{
int i;
while(cin>>n>>k)
{
for(i=0; i>a[i];
if(gg(0,0))
{
cout<