收集了网上其他人提供的算法!
代码一:
#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; }