IOI 花店櫥窗

2021-08-06 04:39:03 字數 1323 閱讀 9925

ioi 花店櫥窗

2023年8月14日

dp+遞迴輸出解決方案

假設你想以最美觀的方式布置花店的櫥窗。現在你有f束不同品種的花束,同時你也有至少同樣數量的花瓶被按順序擺成一行。這些花瓶的位置固定於架子上,並從1至v順序編號,v是花瓶的數目,從左至右排列,則最左邊的是花瓶1,最右邊的是花瓶v。花束可以移動,並且每束花用1至f間的整數唯一標識。標識花束的整數決定了花束在花瓶中的順序,如果i<j,則令花束i必須放在花束j左邊的花瓶中。

例如,假設一束杜鵑花的標識數為1,一束秋海棠的標識數為2,一束康乃馨的標識數為3,所有的花束在放入花瓶時必須保持其標識數的順序,即:杜鵑花必須放在秋海棠左邊的花瓶中,秋海棠必須放在康乃馨左邊的花瓶中。如果花瓶的數目大於花束的數目。則多餘的花瓶必須空置,且每個花瓶中只能放一束花。

每乙個花瓶都具有各自的特點。因此,當各個花瓶中放入不同的花束時,會產生不同的美學效果,並以美學值(乙個整數)來表示,空置花瓶的美學值為零。

在上述例子中,花瓶與花束的不同搭配所具有的美學值,如下表所示。

花  瓶 1      2     3      4      5

1 (杜鵑花)     7      23     -5     -24     16

2 (秋海棠)     5      21     -4     10     23

3 (康乃馨)     -21     5     -4     -20     20

例如,根據上表,杜鵑花放在花瓶2中,會顯得非常好看;但若放在花瓶4中則顯得十分難看。

為取得最佳美學效果,你必須在保持花束順序的前提下,使花束的擺放取得最大的美學值。如果有不止一種的擺放方式具有最大的美學值,你只要輸出字典序最小的那種擺放方式。

#include

#include

#include

#include

using

namespace

std;

int f, v;//f朵花,v個花瓶;

int a[200][200];//第i朵花放入第k個花瓶的美學值;

int t[120][120][120];

//對於第i朵花,放在從第k個花瓶到第j個花瓶中能產生的最大的美學值;

int dp[120][120];//動態規劃,前i朵花放到前k個瓶子裡,產生的最大的美學值;

void putin()

t[j][v][v] = a[j][v];

}}void work_dp()

void printout(int x, int y)

}int main()

IOI 1999 花店櫥窗布置

題目鏈結 演算法 f i j 表示放了前i束花,第i束花放在第j個花瓶中,所能獲得的最大美學值 由於要輸出方案,我們不妨對於每個狀態記乙個pre,最後沿著pre陣列反推出方案即可 includeusing namespace std define maxf 110 const int inf 2e9...

花店櫥窗布置

題目描述 某花店現有f束花,每一束花的品種都不一樣,同時至少有同樣數量的花瓶,被按順序擺成一行,花瓶的位置是固定的,從左到右按1到v順序編號,v是花瓶的數目。花束可以移動,並且每束花用1到f的整數標識。如果i j,則花束i必須放在花束j左邊的花瓶中。例如,假設杜鵑花的標識數為1,秋海棠的標識數為2,...

花店櫥窗布置

不就是插花嗎?求出動態轉移方程,很容易啊。直接列出動態轉移方程。b i j max b i j b i 1 k 1 a i k i 1.f j i.v f i k i.j include include define r i,a,b for int i a i b i using namespace...