USACO1.3.2barn1
题目
有m个牛棚,有n个牛,住在不同的牛棚(不住满),要用k个木板封住所有有牛的牛棚,问木板的最小长度
分析
贪心:
显然,当所有木板均被用上时,长度最短(数量最多)(证明….)。 正向思维,初始状态有c块木板,每块木板只盖住一个牛棚。
由c块倒推至m块木板,每次寻找这样的两个牛棚:其间距在所有未连接的木板中最小。 当这两个牛棚的木板连接时,总木板数减1,总长度增加最小
1 | /* |
DP:
将所有牛的牛棚序号a[]排序后,设
dp[i][j]表示用前i个木板修到第j头牛所用的最短长度,初始化为第一个木板修到第i头牛需要花的长度为牛棚到第一个牛棚的长度+1.
每次在两个决策中选择:
1.在当前这个牛棚处,新接一块新的木板。
2.将上一个牛棚的木板长度加长至可以掩盖当前牛棚。
1 | /* |