p1025 數的劃分
p1057 傳球遊戲
p1216 數字三角形
p1182 數列分段 section ii
p1316 丟瓶蓋
有n級的台階,你一開始在底部,每次可以向上邁最多k級台階(最少11級),問到達第n級台階有多少種不同方式。
兩個正整數n,k。
乙個正整數,為不同方式數,由於答案可能很大,你需要輸出ans % 100003後的結果。
這個是典型的遞推思路,類似於斐波拉契數列
#includeusing namespace std;
int n,m;
long long ans[100008];
int main()
ans[i] = (ans[i] + ans[i - j])%100003;
} }cout將整數n分成k份,且每份不能為空,任意兩個方案不相同(不考慮順序)。
例如:n=7,k=3,下面三種分法被認為是相同的。
1,1,5;
1,5,1;
5,1,1.
問有多少種不同的分法。
n( 所屬區間(6,200] ),k( 所屬區間[2,6])
1個整數,即不同的分法。
使用組合數學思想,形成乙個動態規劃遞推式
至少有乙個盒子只有乙個小球的情況數
.沒有乙個盒子只有乙個小球的情況數
#includeusing namespace std;
//動態規劃
//分倆種情況
int n,k;
int f[205][8];
int main()
for (int i=2;i<=n;i++)
else
} }cout上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。
遊戲規則是這樣的:n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個(左右任意),當老師再次吹哨子時,傳球停止,此時,拿著球沒有傳出去的那個同學就是敗者,要給大家表演乙個節目。
聰明的小蠻提出乙個有趣的問題:有多少種不同的傳球方法可以使得從小蠻手裡開始傳的球,傳了m**次以後,又回到小蠻手裡。兩種傳球方法被視作不同的方法,當且僅當這兩種方法中,接到球的同學按接球順序組成的序列是不同的。比如有三個同學1號、2號、3號,並假設小蠻為1號,球傳了3次回到小蠻手裡的方式有1->2->3->1和1->3->2->1,共2種。
一 行,
有兩個用
空格隔開
的整數n
,m。(
3<=n
<=30
,1<=m
<=30
)一行,有兩個用空格隔開的整數n,m。(3 <= n <= 30,1 <= m <= 30)
一行,有兩個
用空格隔
開的整數
n,m。
(3<=n
<=3
0,1<=m
<=3
0)1個整數,表示符合題意的方法數。
一開始,我使用簡單的遞迴,發現超時大部分資料點
然後使用動態規劃 (更像當於是遞推)
#includeusing namespace std;
int n,m;
int ans;
/* 50分基礎遞迴
void solve(int step,int now)
if(now == n + 1)
if(step == m)
return;
} else
}int main()
f[n][k] = f[1][k - 1] + f[n - 1][k - 1];
} cout觀察下面的數字金字塔。
寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。
7388102
7444
5265
在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大
第乙個行包含 r(1<= r<=1000) ,表示行的數目。
後面每行為這個數字金字塔特定行包含的整數。
所有的被**的整數是非負的且不大於100。
單獨的一行,包含那個可能得到的最大的和
動態規劃,為了方便動態,採取從金字塔底部向上的做法
最大值最小化,最小值最大化 - 二分法+貪心
#includeusing namespace std;
int n,m;
int a[100008];
int imax(int x,int y)
int lef;
int rig;
int total = 0;
int tim = 0;
int ans = 0;
bool judge(int x,int a)
int main()
//cout<
//return 0;
while(lef<=rig)
else
}cout陶陶是個貪玩的孩子,他在地上丟了a個瓶蓋,為了簡化問題,我們可以當作這a個瓶蓋丟在一條直線上,現在他想從這些瓶蓋裡找出b個,使得距離最近的2個距離最大,他想知道,最大可以到多少呢?
第一行,兩個整數,a,b。(b<=a<=100000)
第二行,a個整數,分別為這a個瓶蓋座標。
僅乙個整數,為所求答案。
最小值最大化問題 -> 二分法 + 貪心
其實,最主要的**部分就是judge函式的編寫
至於最後答案的輸出,可以嘗試一下,來對比獲得.
#include#includeusing namespace std;
int a,b;
int p[100008];
int ans;
bool judge(int limit)
} if(total >= b)
else
} int main()
sort(p+1,p+a+1);
int l = 1;
int r = p[a] - p[l];
while(l<=r)
else
} cout<
return 0;
}
洛谷 1057 傳球遊戲(遞推與遞迴二分)
題目描述 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師在此吹哨子時,傳球停止,此時,拿著球沒有傳出...
洛谷二分答案問題
二分答案關鍵有2點 1.怎麼寫judge函式,其實就是根據題意想辦法判斷我們列舉的這個答案是否可行 合法 2.找到了乙個可行解 合法的,超過題目限制是不合法 再往左邊還是右邊查詢看是否有更優的解是個問題,需要好好想想。這兩點想明白了,二分就會異常簡單甚至比暴力列舉還要簡單。因為暴力列舉你還要考慮 0...
洛谷1182 1336 二分答案技巧
題目傳送門 今天真是令人悲傷的一天,寫什麼都寫不出來,本來想找點st表的題做,在找題的路上意外看到了網路流,想到自己網路流完全不行就想研究這個,為了研究網路流,我想先去研究我同樣薄弱的bfs,於是又遇到了我的一生之敵八數碼,想把八數碼解決就先練一下字串雜湊,結果就是直到現在,一事無成,只能說如下圖 ...