題目鏈結;
題目:
方有w個白色立方體和b個黑色立方體,現在小方想把它們堆成乙個立方體塔。
一座高度為h的立方體塔,最底層有h個立方體,每往上一層,所需立方體減一,直到最高層只需要乙個立方體。
為了讓這座塔看起來美觀,小方希望,每一層都只能用一種顏色的立方體。
小方希望把這座塔疊的盡可能高,因此他想知道塔的最大高度是多少,以及這個高度的立方體塔能有幾種。
兩種立方體塔,當且僅當至少有一層的顏色是不同的,則被認為是不同的。
輸入格式
共一行,包含兩個整數w和b。
輸出格式
共一行,包含兩個整數h和c,分別表示最高塔的高度以及此高度塔的種類數。
因為種類數可能較多,請將c對10^9+7取模後的值輸出。
資料範圍
0≤w,b≤10^5
輸入樣例:
1 1
輸出樣例:
1 2
首先我們考慮如何算塔的最大高度,如果不考慮顏色,總共有w+b個立方體,然後高度為h需要h(h+1)/2塊,那麼
h(h+1)/2<=w+b 就能算出最大的h。這個h就是合法的最大高度。因為 h(h+1)/2 >=min(w,b). 畫乙個高度為h的立方體塔,觀察能夠發現乙個規律,取這h層中的若干層,塊數之和肯定能夠湊出1到h(h+1)/2中的任意數字。所以就算最大高度不需要考慮顏色。
然後考慮如何算高度為h的最大方案數。有w塊白色。那麼最多使用w塊白色。我們先算一下選0到w塊白色的方案數。有1到h層,每層是白色或者黑色,那麼這就是01揹包計算方案數了。然後列舉白色塊數,假設塊數為i,那麼需要h(h+1)/2-i塊,如果h(h+1)/2-i<=b.那麼選i塊白色合法。答案加上f[i]. (f[i]是使用i塊白色的方案數,通過01揹包算出來的)
#include using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const int mod=1e9+7;
ll f[maxn];
int w,b,h;
int main()
}ll ans=0;
for(int i=0;i<=w;i++)
}printf("%d %lld\n",h,ans);
return 0;
}
3D 旋轉立方體
source cube src.js var cube function this.5 function d,e,a if e if a this.1 this.1 function p j,g,b,o this.7 function this.3 function this.4 function ...
3D立方體旋轉
1 首先要知道3d,x軸,y軸,z軸的方向 如圖所示 2 要想做乙個立方體首先是做6個面 以中間為基準 中間向前面平移150px transform translatez 150px 後面也平移150px,然後旋轉 rotatey 180deg 這樣前後面就做完了。左 以中間為準逆時針針旋轉90度 ...
3d實現立方體
3d 俗稱3d變換,指基於3d立體的角度來設定盒子。例如,將盒子設定為立方體。3d的效果跟2d是一樣的,有平移和旋轉,不同點在於,2d只有x軸和y軸,3d會多乙個z軸,用於表示立體。3d的效果通過需要遠距離觀察才能看出立體效果,因為距離太近,我們只能看出平面的2d效果,這就需要在設定3d變換效果之前...