贝壳扑克牌题解
#include<bits/stdc++.h>
using namespace std ;
int no_straight( vector<int> nums , int residue )
{
sort( nums.begin() , nums.end() ) ;
int i ;
for( i = nums.size() - 1 ; i >= 0 && residue > 0 ; i-- )
{
residue -= nums[i] ;
if( nums[i] == 4 ) residue -= 2 ;
if( nums[i] == 3 ) residue -= 1 ;
}
return nums.size() - 1 - i ;
}
int dfs( int first , int residue ,vector<int> nums )
{
int res = no_straight( nums , residue ) ;
for( int i = first ; i < nums.size() ; i++ )
{
vector<int> nums_cur ;
nums_cur = nums ;
for( int j = 1 ; i+j-1 < nums.size() ; j++ )
{
nums_cur[i+j-1]-- ;
if( nums_cur[i+j-1] < 0 )
break ;
if( j < 5 )
continue ;
int x = dfs( i , residue - j , nums_cur ) ;
res = min( res , 1+x ) ;
}
}
return res ;
}
int main()
{
vector< int > nums(13,0) ;
string s = "8K67A65K27T59K346AK2" ;
for( int i = 0 ; i < 20 ; i++ )
{
char x ;
x = s[i];
int y ;
if( '2'<=x && x<='9' )
y = x-'0'-1 ;
else if( x == 'A' )
y = 0 ;
else if( x == 'T' )
y = 9 ;
else if( x == 'J' )
y = 10 ;
else if( x == 'Q' )
y = 11 ;
else if( x == 'K' )
y = 12 ;
nums[y]++ ;
}
int res = dfs( 0 , 20 , nums ) ;
cout << res ;
return 0 ;
}
#贝壳找房##题解#
using namespace std ;
int no_straight( vector<int> nums , int residue )
{
sort( nums.begin() , nums.end() ) ;
int i ;
for( i = nums.size() - 1 ; i >= 0 && residue > 0 ; i-- )
{
residue -= nums[i] ;
if( nums[i] == 4 ) residue -= 2 ;
if( nums[i] == 3 ) residue -= 1 ;
}
return nums.size() - 1 - i ;
}
int dfs( int first , int residue ,vector<int> nums )
{
int res = no_straight( nums , residue ) ;
for( int i = first ; i < nums.size() ; i++ )
{
vector<int> nums_cur ;
nums_cur = nums ;
for( int j = 1 ; i+j-1 < nums.size() ; j++ )
{
nums_cur[i+j-1]-- ;
if( nums_cur[i+j-1] < 0 )
break ;
if( j < 5 )
continue ;
int x = dfs( i , residue - j , nums_cur ) ;
res = min( res , 1+x ) ;
}
}
return res ;
}
int main()
{
vector< int > nums(13,0) ;
string s = "8K67A65K27T59K346AK2" ;
for( int i = 0 ; i < 20 ; i++ )
{
char x ;
x = s[i];
int y ;
if( '2'<=x && x<='9' )
y = x-'0'-1 ;
else if( x == 'A' )
y = 0 ;
else if( x == 'T' )
y = 9 ;
else if( x == 'J' )
y = 10 ;
else if( x == 'Q' )
y = 11 ;
else if( x == 'K' )
y = 12 ;
nums[y]++ ;
}
int res = dfs( 0 , 20 , nums ) ;
cout << res ;
return 0 ;
}
#贝壳找房##题解#