搜索

算法:

题意比赛搞错了,只要最后彼此拿到的财务价值一样即可。

搜索,2(40)次。加个if条件剪枝就可以了。

View Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;

int sum1,sum2;
int visit[100];
int f = 0;
int a[110],b[110];
int N;

void DFS( int x, int sum, int sb)
{ 
  if( x > N )
      return;
  if( sum == sb )
  {
     f = 1;  
     return;   
  }
  if( f )
      return;
  for( int i = x + 1; i <= N; i++)
  {  
      if( sum < sb )
      DFS( i, sum + a[i],sb - b[i]);
     // if ( sum > sb )
      DFS( i, sum, sb );
      break;
      if( f )
        return;      
  }     
     
}

int main( )
{
  while( scanf("%d",&N) != EOF)
  { 
    sum1 = sum2 = 0;
    for( int i = 1; i <= N; i++)
    {
      scanf("%d%d",&a[i],&b[i]);
      sum1 += a[i];
      sum2 += b[i];
    }
     f = 0;
     DFS(0, 0, sum2);
     if( f )
        puts("YES");
     else
        puts("NO");         
  }
  return 0;
}

posted on 2012-08-05 21:09  more think, more gains  阅读(160)  评论(0编辑  收藏  举报

导航