NYOJ-927 The partial sum problem
The partial sum problem
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描写叙述
- One day,Tom’s girlfriend give him an array A which contains N integers and asked him:Can you choose some integers from the N integers and the sum of them is equal to K.
- 输入
- There are multiple test cases.
Each test case contains three lines.The first line is an integer N(1≤N≤20),represents the array contains N integers. The second line contains N integers,the ith integer represents A[i](-10^8≤A[i]≤10^8).The third line contains an integer K(-10^8≤K≤10^8). - 输出
- If Tom can choose some integers from the array and their them is K,printf ”Of course,I can!”; other printf ”Sorry,I can’t!”.
- 例子输入
-
4 1 2 4 7 13 4 1 2 4 7 15
- 例子输出
-
Of course,I can! Sorry,I can't!
直接dfs用时长,能够剪枝
剪枝代码:用时12ms
01.#include<iostream>02.usingnamespacestd;03.intn,k,a[25];04.booldfs(intp,intsum)05.{06.if(sum==k)return1;07.if(p==n||sum>k)return0;08.if(dfs(p+1,sum))returntrue;09.elsereturndfs(p+1,sum+a[p]);10.}11.intmain()12.{13.while(cin>>n)14.{15.for(inti=0;i<n;i++)16.cin>>a[i];17.cin>>k;18.if(dfs(0,0))19.cout<<"Of course,I can!"<<endl;20.else21.cout<<"Sorry,I can't!"<<endl;22.}23.return0;24.}
普通dfs:用时860ms
01.#include<iostream>02.usingnamespacestd;03.intn,k,a[25];04.booldfs(intp,intsum)05.{06.if(p==n)returnsum==k;07.if(dfs(p+1,sum))returntrue;08.if(dfs(p+1,sum+a[p]))returntrue;09.returnfalse;10.}11.intmain()12.{13.while(cin>>n)14.{15.for(inti=0;i<n;i++)16.cin>>a[i];17.cin>>k;18.if(dfs(0,0))19.cout<<"Of course,I can!"<<endl;20.else21.cout<<"Sorry,I can't!"<<endl;22.}23.return0;24.}

浙公网安备 33010602011771号