dfs,对于每个点数的牌,都有:不出、作为同花出、作为顺子出这三种选择
#include<bits/stdc++.h> using namespace std; int a[20],x,anss=0x3f3f3f3f; void dfs(int k) { if(k>13) { int sum=0; for(int i=1;i<=13;i++) { sum+=a[i]*i; } anss=min(anss,sum); return; } if(a[k]==0) { return dfs(k+1); } if(a[k]>=3) //同花 { for(int i=3;i<=a[k];i++) { a[k]-=i; dfs(k); a[k]+=i; } } int t=0; for(int i=k;i<=13;i++) { if(a[i]==0) break; else t++; if(t>=3) //顺子 { for(int j=k;j<=i;j++) { a[j]--; } dfs(k); for(int j=k;j<=i;j++) { a[j]++; } } } dfs(k+1); //不出 } int main() { for(int i=1;i<=7;i++) { cin>>x; a[x]++; } dfs(1); cout<<anss<<endl; }
原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/12630864.html
时间: 2024-10-08 09:18:33