返回列表 發帖

a051: 骰子點數

本帖最後由 李知易 於 2024-11-26 22:25 編輯


a051
本帖隱藏的內容需要回復才可以瀏覽
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long DP[11][61] = {0};
  4. int f(int n, int m)
  5. {
  6.     if(n > m || n  * 6 < m )
  7.         return 0;
  8.     if(n == 1)
  9.         return 1;
  10.     if(DP[n][m])
  11.         return DP[n][m];
  12.     return DP[n][m] = f(n-1, m-6) + f(n-1, m-5) + f(n-1, m-4) + f(n-1, m-3) + f(n-1, m-2) + f(n - 1, m - 1);

  13. }
  14. int main()
  15. {
  16.     int n, m;
  17.     cin >> n >> m;
  18.     cout<<f(n, m);
  19.     return 0;

  20. }
複製代碼

TOP

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long compute(long long a,long long b){
  4.     if(b>6*a || b<0 || a<0){
  5.         return 0;
  6.     }else if(a==1){
  7.         if(b<=6 && b>=1){
  8.             return 1;
  9.         }else{
  10.             return 0;
  11.         }
  12.     }else{
  13.         return compute(a-1,b-1)+compute(a-1,b-2)+compute(a-1,b-3)+compute(a-1,b-4)+compute(a-1,b-5)+compute(a-1,b-6);
  14.     }
  15. }

  16. int main()
  17. {
  18.     long long a,b;
  19.     cin>>a>>b;
  20.     cout<<compute(a,b);
  21.     return 0;
  22. }
複製代碼

TOP

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. long long DP[11][61]={0};
  4. int f(int n,int m)
  5. {
  6.     if(n>m || n*6<m)
  7.         return 0;
  8.     if(n==1)
  9.         return 1;
  10.     if(DP[n][m])
  11.         return DP[n][m];
  12.     return DP[n][m]=f(n-1,m-6)+f(n-1,m-5)+f(n-1,m-4)+f(n-1,m-3)+f(n-1,m-2)+f(n-1,m-1);
  13. }
  14. int main()
  15. {
  16.     int n,m;
  17.     cin>>n>>m;
  18.     cout<<f(n,m);
  19.     return 0;
  20. }
複製代碼

TOP

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long DP[11][61] = {0};
  4. int f(int n,int m)
  5. {
  6.     if(n>m||n*6<m){
  7.         return 0;
  8.     }
  9.     if(n==1){
  10.         return 1;
  11.     }
  12.     if(DP[n][m]){
  13.         return DP[n][m];
  14.     }
  15.     return DP[n][m]=f(n-1,m-6) + f(n-1,m-5) + f(n-1,m-4) + f(n-1,m-3) + f(n-1,m-2) + f(n-1,m-1);
  16. }
  17. int main()
  18. {
  19.     int n,m;
  20.     cin>>n>>m;
  21.     cout<<f(n,m);
  22.     return 0;
  23. }
複製代碼

TOP

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. long long drop(int n, int m) {
  4.     long long dp[11][1001]={0}; //假設n<=10且m<=1000
  5.     dp[0][0]=1;
  6.     for (int i=1;i<=n;i++)
  7.     {
  8.         for (int j=1;j<=m;j++)
  9.         {
  10.             for (int k=1; k <= 6;k++)
  11.             {
  12.                 if (j>=k)
  13.                 {
  14.                     dp[i][j]+=dp[i-1][j-k];
  15.                 }
  16.             }
  17.         }
  18.     }
  19.     return dp[n][m];
  20. }
  21. int main(){
  22.     int n,m;
  23.     cin>>n>>m;
  24.     cout<<drop(n,m)<<endl;
  25.     return 0;
  26. }
複製代碼
    ⪔〠   

TOP

返回列表