Vijos p1154買蛋糕 dfs 剪枝

2021-10-10 07:58:49 字數 1410 閱讀 9561

野貓過生日,大家當然會送禮物了(咳咳,沒送禮物的同志注意了哈!!),由於不知道送什麼好,又考慮到實用性等其他問題,大家決定合夥給野貓買乙個生日蛋糕。大家不知道最後要買的蛋糕的準確**,而只會給蛋糕估價,即要買乙個不超過多少錢的蛋糕。眾oier藉此發揮:能否用最少的錢幣數去湊成估價範圍內的所有價值,使得不管蛋糕價值多少,都不用找錢……

現在問題由此引出:對於乙個給定的n,能否用最少的不等的正整數去組成n以內(包括n)的所有的正整數呢?如果能,最少需要多少個正整數,用最少個數又有多少不同的組成方法呢?

只有一行包含乙個整數n(1<=n<=1000)。

一行兩個數,第乙個數是最少需要多少個數,第二個數是用最少個數的組成方案個數。兩個答案用空格分隔。

6
3

2

各個測試點2s

最少用三個數,有兩種方法,分別是:1,2,3和1,2,4。

對於1,2,3有1,2,3,1+3,2+3,1+2+3;

對於1,2,4有1,2,1+2,4,1+4,2+4。

傳送門

參考大佬思路:

先列舉一下有哪些情況,然後找規律

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1002

;int len, ans, n;

void

dfs(

int k,

int maxx,

int sum)

if(k == len)

return;}

for(

int i = maxx +

1; i <= sum +

1; i++

)dfs

(k +

1, i, sum + i);}

intmain()

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1002

;int dp[maxn]

[maxn]

;int len, ans, n;

void

dfs(

int k,

int maxx,

int sum)

for(

int i = maxx +

1; i <= sum +

1; i++)}

intmain()

11 5執行緒終止

如果程序中的任一線程呼叫了exit,exit 或者 exti,那麼整個程序會終止。類似的,當預設動作是終止程序,傳送到執行緒的訊號會終止整個程序。在12.8節中我們會討論更多執行緒和訊號間的互動與通訊 乙個單執行緒有三種退出方式,在不終止整個程序的情況下,終止執行緒的控制流。1.執行緒從啟動例程中返...

1 15 考試總結

題目鏈結 題意 給定乙個無向有權圖,通過一條邊的時間為邊權,每過去一單位時間,每乙個點都會積累 q 公釐雪,初始雪厚 h 雪積累到 l 以上就不能行走 起點,終點不算 求出 s 到 t 的最短時間.有限制條件的最短路,只需在跑 dijkstra 或 spfa 的時候稍微判斷一下即可.include ...

1 15 構造數獨

一 用回溯法構造數獨 include include include include include using namespace std int sudu 9 9 void sudu print int sudu 9 cout endl bool is digital sudu int sudu...