這題看完感覺就是dp,然後我當然就用記憶化搜尋打了,打著打著,覺得想法不一定對,但打完交了一遍,mle,改小陣列再交,就過了,但其實還沒有完全理解透。算是混過的。
相當於dp的方法,dp[i][j]表示前i根筷子組成j組的最小值。我覺得關鍵的問題在於要先反著排序,然後如果筷子數剛好是人數的3倍時,最小的兩根必定會在同一組中,且是一組中的較小的兩根。
/** hdu1500/win.cpp
* created on: 2012-7-27
* author : ben */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn = 5005
;const
int maxk = 1002
;const
int max = 0x7fffffff
;int
chops[maxn];
intdp[maxn][maxk];
int dfs(int i, int
j)
if(i == j * 3
) else
if(i > j * 3
)else
return
dp[i][j];
}int
main()
sort(chops, chops + n, greater());
memset(dp, -1, sizeof
(dp));
for(int i = 0; i < n; i++)
int ans = dfs(n, k + 8
); printf(
"%d\n
", ans);
}return0;
}
hdu1500 排序 單調佇列優化 )
從n根筷子裡面,選擇k 8個集合的筷子,每個集合三根筷子,a b c,費用是 a b 2,問最小的費用是多少。將n根筷子排序之後,可以知道a和b的下標一定是連續的。比如有 a b c d 那麼不可能是a c 乙個集合,b d乙個集合,因為這樣費用反而更大。設dp i j 為第i個集合的筷子,以j結尾...
1500 單位轉換
三師弟最近在複習考研,在複習計算機組成原理的時候,遇到了乙個問題。就是在計算機儲存裡面的單位轉換。我們都知道1mb 1024kb,1kb 1024b,1b 8bit,他在做題的時候經常會遇到格式各樣的,比如多少mb,kb,b什麼的,但是都要轉換為bit,題目做的太多他都迷茫了,現在需要你通過程式來幫...
msg1500說明書 MSG1500刷機筆記
前幾天在閒魚上看到一款路由器瑞斯康達sgm1500,網上查了一下相關配置,搞了一台。配置如下 cpu mt7621 介面 1wan 4lan,usb2.0 全千兆網口 無線 2.4g 5g 7615dn flash 128m nand 記憶體 256m 刷breed 確定breed cpu和無線晶元...