UVa:10664 Luggage

来源:互联网 发布:dijkstra算法优先队列 编辑:程序博客网 时间:2024/04/30 10:25

题意:给你一些数,问你能不能分成两组使得每组和相同。

思路:数据量比较小可以用暴搜。如果数据量比较大要用DP。


#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int w[30];int sum,n;bool ok;void dfs(int cur,int  _sum){    if(_sum==sum-_sum) ok=true;    if(ok) return;    for(int i=cur;i<n;++i)    {        dfs(i+1,_sum+w[i]);        dfs(i+1,_sum);    }}int main(){    int T;    scanf("%d",&T);    getchar();    while(T--)    {        memset(w,0,sizeof(w));        char c;        n=0;        sum=0;        ok=false;        while(scanf("%c",&c)==1)        {            if(isdigit(c))                w[n]=w[n]*10+c-'0';            else            {                sum+=w[n];                n++;                if(c=='\n')                    break;            }        }        dfs(0,0);        if(ok)            puts("YES");        else            puts("NO");    }    return 0;}