題目描述
積極探索太空的回報是豐厚的,因為魔法世界的科學家後來通過挖掘史前文明遺址發現,他們所在的星球,每隔一億五千萬年
左右就會發生一次由天外隕石或其他意外事件引發的物種大滅絕。稱霸星球一億多年的恐龍,就是因此而滅絕的。只有積極進
取,銳意創新的宇宙文明,才有可能躲過這場「天罰」。現在,天頂星人對魔法世界發動了大規模隕石攻擊,魔法世界的太空防禦
系統及時作出反應,將防禦能量n分成k份以對付k個隕石,已知每份不能為空(否則會被隕石擊中),任意兩份不能相同(不考
慮順序)。例如:n=7,k=3,下面三種分法被認為是相同的:1,1,5; 1,5,1; 5,1,1。問有多少種不同的分法。
輸入n,k (6輸出乙個整數,即不同的分法。
樣例輸入7 3
樣例輸出4
深搜思路分析:
首先**題目規模2<=k<=6,規模不是很大,考慮到用深搜來做,依次列舉n以內的數字在k個格仔內填充,為了避免重複,確定順序從小到大進行填充。
ac **:
#include
using
namespace std;
int n,k,ans=0;
void
dfs(
int step,
int d,
int num)
//step表示列舉的數,d表示需要填充的格仔數,num即為要劃分的那個數
for(
int i=step;i<=num/d;i++)}
intmain()
這道題可以看成是將n個小球裝入到k個盒子裡面,每個盒子裡面至少有乙個小球,可以分成兩種狀態:
1、至少有乙個盒子內只有乙個球;
2、每個盒子裡的球的數量都大於1個;
兩種狀態之和即為所有狀態的情況。
設dp[i][j]表示將 i 個球裝入到 j 個盒子內,則狀態1可表示為dp[ i - 1 ][ j - 1 ];狀態2可表示為dp[ i - j ][ j ];
則可得到狀態轉移方程為dp[ i ][ j ]=dp[ i - 1][ j - 1]+dp[ i - j ][ j ];
話不多說,差不多就是這樣,上**:
ac **:
#include
using
namespace std;
int dp[
300]
[300];
intmain()
for(i=
2;i<=k;i++
)for
(i=2
;i<=n;i++)}
printf
("%d"
,dp[n]
[k])
;return0;
}
深搜剪枝 數的劃分
時間限制 1 sec 記憶體限制 128 mb 提交 16 解決 10 提交 狀態 討論版 命題人 add cy 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認為是相同的。1 1 5 1 5 1 5 1 1 問有多少種不同的分法。n...
數的劃分問題 DP
問題 把乙個整數n分成k份,每份都不為0,有幾種分法?分析 情況分為兩類 一 每份中不包含1的方法,為保證每份 2,先拿出k個1到每乙份,然後把剩下的n k分為k份,分法有dp n k k 二 至少有乙份包含1,拿出1個當為乙份。剩下的n 1個分為k 1份,分法有dp n 1 k 1 include...
數的劃分問題總結 DP或遞迴
問題 1531 藍橋杯 演算法提高vip 數的劃分 時間限制 1sec 記憶體限制 128mb 提交 438 解決 175 題目描述 乙個正整數可以劃分為多個正整數的和,比如n 3時 3 1 2 1 1 1 共有三種劃分方法。給出乙個正整數,問有多少種劃分方法。資料規模和約定 n 100 輸入乙個正...