照例良心題目鏈結
此題使用f[i][j]表示前i束花放進前j個花瓶的時候的最大值。轉移方程如下
f[i][j]=max(f[i][j-1],f[i-1][j-1]+que[i][j])
其中que[i][j]表示第i束花放進第j個花瓶裡的情況。有這個轉移方程的原因是,每一束花在每乙個花瓶裡的情況只有兩種:放進去了和沒放進去。第一種f[i][j-1]就是沒放進去,第二種
f[i-1][j-1]+que[i][j]就是放進去了的情況
特殊的,當i>=j時第一種情況不能成立
路徑儲存死活沒想出來,最後參考題解發現了乙個遞迴輸出——於是就可恥的抄了下來。
**如下
#include#include#include
#include
inline
long
long
read()
while
(isdigit(ch))
return num*f;
}int que[1000][1000
];int f[1000][1000
];int last[1000][1000
];void print(int a,int
b)
else print(a,b-1
);
return;}
intmain()
else f[i][j]=f[i][j-1
]; }
} printf(
"%d\n
",f[n][m]);
print(n,m);
return0;
}
luogu P1854 花店櫥窗布置
某花店現有f束花,每一束花的品種都不一樣,同時至少有同樣數量的花瓶,被按順序擺成一行,花瓶的位置是固定的,從左到右按1到v順序編號,v是花瓶的數目。花束可以移動,並且每束花用1到f的整數標識。如果i j,則花束i必須放在花束j左邊的花瓶中。例如,假設杜鵑花的標識數為1,秋海棠的標識數為2,康乃馨的標...
P1854 花店櫥窗布置
時間限制 1 sec 記憶體限制 64 mb 假設你想以最美觀的方式布置花店的櫥窗。你有f束花,每束花的品種都不一樣,同時,你至少有同樣數量的花瓶,被按順序擺成一行。花瓶的位置是固定的,並從左至右,從1至v順序編號,v是花瓶的數目,編號為1的花瓶在最左邊,編號為v的花瓶在最右邊。花束則可以移動,並且...
P1854 花店櫥窗布置
給乙個 m times n 的矩陣,m leq n 在每一行選乙個數,滿足每一行選擇數的位置在上一行選擇數字置的後面,求所有選擇的數的和的最大值和每一行選擇的數的位置 資料不大 搞式子 dp i j max dp i 1 k val i j k 再開個陣列記錄每次選擇的數的位置 最後遞迴輸出就行了 ...