洛谷 P1077 擺花

2021-09-29 14:32:07 字數 1086 閱讀 2842

題目原位址

2 4

3 2

-輸出

2
首先,我們想到的一定是暴力dfs—20分

#include

#include

using

namespace std;

int n,m,ans,a[

105]

,b[105];

void

dfs(

int k,

int space)

if(k==n)

return

;for

(int i=

min(a[k]

,space)

;space-i<=b[k]

&&i>=

0;i--

) ans%

=1000007

;return;}

intmain()

剪個枝可能就到50分了

但是,資料量告訴我們,這道題必須用dp

dp[i][j]表示只用前 i 種花,共擺 m 盆的方法數量

那麼,我們可以知道,dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+dp[i-1][j-3]+…+dp[i-1][j-a[i]+1]+dp[i-1][j-a[i]]

看不懂就多看幾遍

那麼,動態轉移可以用3層迴圈解決

我絕對不會告訴你dp陣列是可以滾動的

#include

#include

using

namespace std;

int n,m,ans,a[

105]

,dp[

1000000];

intmain()

}printf

("%d"

,dp[m]);

// fclose(stdin);

// fclose(stdout);

return0;

}

擺花 洛谷p1077

小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第i種花不能超過ai盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。試程式設計計算,一共有多少種不同的擺花方案。...

洛谷 P1077 擺花

一道簡單的dp問題。dp i j 表示前i種花j個花盆的方案數。那麼就有狀態轉移方程為sum dp i 1 k 其中k的取值是從0到min j,a i include using namespace std int m,n int dp 105 105 int a 105 int mod 10000...

洛谷p1077 擺花

題外廢話 真的超級喜歡這道題 擺花 題目鏈結 yy一提醒,我發現這道題和 洛谷p2089 烤雞有異曲同工之妙 資料更大了更容易tle呢qwq solution1 暴搜 搜尋 關於搜尋就不用多介紹了吧,這裡是用了dfs dfs函式中有兩個變數,rest和i分別表示還需要擺放多少盆花以及現在擺放到第幾種...