題目原位址
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分別表示還需要擺放多少盆花以及現在擺放到第幾種...