| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
不会超吧~~~~~In Reply To:从1011改过来的果真超时了,真是奇怪啊。原来1011的数据真的弱了。 Posted by:yogafrank at 2008-09-08 13:34:22 > 大牛帮忙剪剪啊!!!
>
> #include <iostream>
> #include <algorithm>
> using namespace std;
>
> const int N = 4;
> int sticks[20];
> bool used[20];
> int m, side;
>
> bool cmp ( int a, int b )
> {
> return a <= b;
> }
>
> bool search ( int count, int left, int pos )
> {
> bool flag = false;
>
> if ( count == N )
> return true;
> if ( left == side )
> flag = true;
>
> for ( int i = 0; i < m; i++ )
> {
> if ( !used[i] )
> {
> if ( left > sticks[i] )
> {
> used[i] = true;
>
> if ( search ( count, left - sticks[i], pos + 1 ) )
> return true;
> used[i] = false;
>
> if ( flag )
> return false;
> }
> else if ( left == sticks[i] )
> {
> used[i] = true;
>
> if ( search ( count + 1, side, 0 ) )
> return true;
> used[i] = false;
>
> return false;
> }
> }
> }
>
> return false;
> }
>
> bool isbigger ()
> {
> for ( int i = 0; i < m; i++ )
> if ( sticks[i] > side )
> return true;
> return false;
> }
>
> int main()
> {
> int t;
> freopen ( "1909.txt", "r", stdin );
> for ( cin >> t; t > 0; t-- )
> {
> cin >> m;
>
> for ( int i = 0; i < m; i++ )
> cin >> sticks[i];
>
> sort ( sticks, sticks + m, cmp );
>
> int len = 0;
> for ( int j = 0; j < m; j++ )
> len += sticks[j];
>
> side = len / N;
> if ( len % 4 != 0 || isbigger () )
> {
> cout << "no\n";
> continue;
> }
>
> memset ( used, false, sizeof ( used ) );
>
> if ( search ( 0, side, 0 ) )
> cout << "yes\n";
> else
> cout << "no\n";
> }
>
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator