搜索
算法:
题意比赛搞错了,只要最后彼此拿到的财务价值一样即可。
搜索,2(40)次。加个if条件剪枝就可以了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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) 编辑 收藏 举报