description
xc抽空光顧了lp的飼養場,在一大堆讚美語之後和lp玩起了乙個遊戲——
乙個完整的倒三角有n層,第一層有n個數字,為原始數字,接下來每層都比上一層減少1個數字,並有f[i,j]=f[i-1,j]+f[i-1,j+1] ,如
3 1 2 4
4 3 6
7 9
16由xc給出f[n,1],和乙個限制max(0<=f[1,i]<=max),lp要迅速回答出字典序最小的f[1]序列,即f[1,1]最小的情況下f[1,2]要最小……以此類推。
xc覺得這個問題對於lp還是太簡單了,於是又新增了一些壞點,以座標的形式給出,所謂壞點就是f[i,j]恒為0,現在就讓大家一起來玩這個遊戲吧。
input
第一行四個數 n,m,max,f[n,1]
接下來m行,每行乙個座標,表示是乙個壞點
output
無解則輸出-1
否則輸出n行,第i行輸出f[1,i],要求f[1]字典序最小
sample input
3 1 3 4sample output2 2
1data constraint30
hint
【資料說明】
40%的資料:n<=10;m=1;max<=10;f[n,1]<=1,000
90%的資料:max<=100
100%的資料:n<=100;m<=20;max<=10,000;0<=f[n,1]<=10,00
我們把它倒過來,然後就會發現它的係數是楊輝三角
然後這個楊輝三角是有阻擋的
在求出最底一層的係數後,我們可以dfs,然後dfs可以有剪枝:當前格所選的數最大不超過 min(max,剩下的數/當前係數)
#include #includeview code#include
using
namespace
std;
const
int n=1e2+10
;int
n,m,mx,s,a[n],c[n][n];
bool
rtn;
void dfs(int dep,int
sum)
if (dep==n+1) return
;
if (c[n][dep]==0
)
for (int i=0;i<=min(mx,(s-sum)/c[n][dep]);i++)
}int
main()
for (int i=1;i<=n;i++) printf("
%d\n
",a[i]);
}
數學基礎 遊戲開發數學技術
1 一般式 ax by c 0 a b不同時為0 適用於所有直線 a1 a2 b1 b2 c1 c2 兩直線平行 a1 a2 b1 b2 c1 c2 兩直線重合 橫截距a c a 縱截距b c b 2 點斜式 y y0 k x x0 適用於不垂直於x軸的直線 表示斜率為k,且過 x0,y0 的直線 ...
佔點遊戲(數學)
problem b 佔點遊戲 maple在乙個無限展開的只有整數點的二維平面上找到兩個點,由tmk和maple分別操控這兩個點,兩人輪流操作,每一次操作中tmk或maple可以把他的點移動一格到上 下 左 右四個方向,當tmk操作時,移動到的這個點會被染成紅色,而當maple操作時,移動到的這個點會...
數學故事 火柴遊戲
乙個最普通的火柴遊戲就是兩人一起玩,先置若干支火柴於桌上,兩人輪流取,每次所取的數目可先作一些限制,規定取走最後一根火柴者獲勝。規則一 若限制每次所取的火柴數目最少一根,最多三根,則如何玩才可致勝 例如 桌面上有 n 15 根火柴,甲 乙兩人輪流取,甲先取,則甲應如何取才能致勝 為了要取得最後一根,...