日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

盒子与小球之二

發布時間:2025/7/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 盒子与小球之二 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
描述

N個有差別的盒子(1<=N<=20)。你有A個紅球和B個藍球。0 <= A <= 15, 0 <= B <= 15。球除了顏色沒有任何區別。你可以將球放進盒子。一個盒子可以同時放進兩種球,也可以只放一種,也可以空著。球不必全部放入盒子中。編程計算有多少種放置球的方法。?

輸入

就一行,N,A,B,用空格分開

輸出

就一行,輸出放置方案總數

樣例輸入
2 1 1
樣例輸出
9

查看

思路在代碼注釋中,很明顯要用到分類,另外就是要用 long long

#include<cstdio> #include<cmath> #include<iostream> #include<algorithm> #include<vector> #include<string> #include<map> #include<cstring> #define DEBUG(x) cout << #x << " = " << x << endl typedef long long ll; using namespace std; int N,A,B; ll ways[25][20][20]; ///將a個紅球和b個藍球放入前i個盒子中的放法 ll Ways(int i,int a,int b) {ll t=ways[i][a][b];if(t!=-1)return t;if(i==0)return 1;if(a==0&&b==0)return 1;ll r;///不放r=Ways(i-1,a,b);///放一種for(int k=1;k<=a;k++){r+=Ways(i-1,a-k,b);}for(int k=1;k<=b;k++){r+=Ways(i-1,a,b-k);}///放兩種for(int p=1;p<=a;p++){for(int q=1;q<=b;q++){r+=Ways(i-1,a-p,b-q);}} // DEBUG(r);ways[i][a][b]=r;return r; } int main() { // freopen("in.txt","r",stdin);memset(ways,0xff,sizeof(ways));scanf("%d %d %d",&N,&A,&B);printf("%lld\n",Ways(N,A,B));return 0; }

?

轉載于:https://www.cnblogs.com/MalcolmMeng/p/9178257.html

總結

以上是生活随笔為你收集整理的盒子与小球之二的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。