牌型种类

收集了网上其他人提供的算法!

代码一:

#include <iostream>
using namespace std;
typedef long long LL;

LL dp[14][14]; //

int main() {
	dp[1][0] = dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = 1;

	for (int i = 2; i <= 13; i++) {
		for (int k = 0; k <= 13; k++) {
			if (k - 4 >= 0) dp[i][k] += dp[i-1][k-4];
			if (k - 3 >= 0) dp[i][k] += dp[i-1][k-3];
			if (k - 2 >= 0) dp[i][k] += dp[i-1][k-2];
			if (k - 1 >= 0) dp[i][k] += dp[i-1][k-1];
			dp[i][k] += dp[i-1][k];
		}
	}

	cout << dp[13][13] << endl;
	return 0;
}

 

代码二:

ain()
 {
     int i[20];
     long long ans=0;
     for(i[1]=0;i[1]<=4;i[1]++)
     for(i[2]=0;i[2]<=4;i[2]++)
     for(i[3]=0;i[3]<=4;i[3]++)
     for(i[4]=0;i[4]<=4;i[4]++)
     for(i[5]=0;i[5]<=4;i[5]++)
     for(i[6]=0;i[6]<=4;i[6]++)
     for(i[7]=0;i[7]<=4;i[7]++)
     for(i[8]=0;i[8]<=4;i[8]++)
     for(i[9]=0;i[9]<=4;i[9]++)
     for(i[10]=0;i[10]<=4;i[10]++)
     for(i[11]=0;i[11]<=4;i[11]++)
     for(i[12]=0;i[12]<=4;i[12]++)
     for(i[13]=0;i[13]<=4;i[13]++)
     {
         int t=0;
        for(int j=1;j<=13;j++)
             t+=i[j];
        if(t==13)
            ans++;
    } 
     cout<<ans<<endl;
     system("pause");
    return 0;
}

 

代码三:

{
    if (sum>13)return;
     if (cur == 13)
     {
         if (sum == 13)ans++;
         return;
     }
     else
     {
         for (int i = 0; i < 5; i++)
         {
             sum += i;
             dfs(cur + 1);
             sum -= i;
         }
     }
 }
 int main()
 {
     dfs(0);
     cout << ans << endl;
     return 0;
}

 

posted on 2016-03-10 20:18  LeoSanford  阅读(472)  评论(0编辑  收藏  举报

levels of contents