NYOJ 927 The partial sum problem 【DFS】+【剪枝】
生活随笔
收集整理的這篇文章主要介紹了
NYOJ 927 The partial sum problem 【DFS】+【剪枝】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
The partial sum problem
時間限制:1000?ms ?|? 內(nèi)存限制:65535?KB 難度:2 描寫敘述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).
這題非常經(jīng)典,剪枝的時候要細心。
#include <stdio.h> #include <stdlib.h> int n, arr[22], sum, vis[22], ok, count; const char *sam[] = {"Sorry,I can't!\n", "Of course,I can!\n"};int cmp(const void *a, const void *b){return *(int *)a - *(int *)b; }void DFS(int k){if(count == sum){ok = 1; return;}for(int i = k; i < n; ++i){if(i && arr[i] == arr[i-1] && !vis[i-1]) //cutcontinue;if(count > sum && arr[i] > 0) return; //cutcount += arr[i]; vis[i] = 1;DFS(i + 1);if(ok) return;count -= arr[i]; vis[i] = 0;} }int main(){while(scanf("%d", &n) == 1){for(int i = 0; i < n; ++i){scanf("%d", arr + i);vis[i] = 0;}scanf("%d", &sum);qsort(arr, n, sizeof(int), cmp);count = ok = 0; DFS(0);printf(ok ? sam[1] : sam[0]);}return 0; }總結(jié)
以上是生活随笔為你收集整理的NYOJ 927 The partial sum problem 【DFS】+【剪枝】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 捕获分组和非捕获分组以及命名分组
- 下一篇: git 拉取分支代码 合分支