50分求助

P2383 狗哥玩木棒

看看我的吧,这题减枝条件很多 ``` #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int a[25], n, m; int b[25]; bool l; void dfs( int step , int b1, int b2, int b3, int b4 ) { int x = max( b1, max( b2, max( b3, b4 ) ) ); if( x - b1 + x - b2 + x - b3 + x - b4 > b[step] ) return ; if( l == 1 ) return ; if( max( b1, max( b2, max( b3, b4 ) ) ) - min( b1, min( b2, min( b3, b4 ) ) ) > b[step] ) { return ; } if( step == 1 ) { if( b1 + a[step] == b2 && b2 == b3 && b3 == b4 ) l = 1; else if( b1== b2 && b2 + a[step] == b3 && b3 == b4 ) l = 1; else if( b1 == b2 && b2 == b3 && b3 + a[step] == b4 ) l = 1; else if( b1 == b2 + a[step] && b2 + a[step] == b3 && b3 == b4 ) l = 1; else if( b1 == b2 && b2 == b3 + a[step] && b3 + a[step] == b4 ) l = 1; else if( b1 == b2 && b2 == b3 && b3== b4 + a[step] ) l = 1; else if( b1 + a[step] == b2 && b2 == b3 && b3== b4 + a[step] ) l = 1; // cout << b1 << " " << b2 << " " << b3 << " " << b4 << endl; return ; } dfs( step - 1, b1 + a[step], b2, b3, b4 ); dfs( step - 1, b1, b2 + a[step], b3, b4 ); dfs( step - 1, b1, b2, b3 + a[step], b4 ); dfs( step - 1, b1, b2, b3, b4 + a[step] ); } int main() { cin >> n; while( n > 0 ) { scanf( "%d", &m ); for( int i = 1; i <= m; i ++ ) { scanf( "%d", &a[i] ); } sort( a + 1, a + m + 1 ); for( int i = 1; i <= m; i ++ ) { b[i] = b[i - 1] + a[i]; } dfs( m, 0, 0, 0, 0 ); if( l ) printf( "yes\n" ); else printf( "no\n" ); l = 0; n --; } return 0; } ```
by caoshurui @ 2022-10-05 22:08:49


@[Iverson_](/user/602519)
by caoshurui @ 2022-10-05 22:09:14


|