BZOJ 1672 Usaco 2005 Dec Cleaning Shifts 清理牛棚 动态规划

本文介绍了USACO 2005 Dec竞赛中的一道题——Cleaning Shifts。题目要求找到在限定时间内确保每时每刻都有牛在打扫牛棚的最低成本。通过使用动态规划的方法,对10000头牛进行排序,并定义状态f[i]表示选第i头牛开始打扫时的最小花费。通过遍历所有可能的组合,更新答案并输出最终的最小成本。
摘要由CSDN通过智能技术生成

题目大意:有一些牛,他们的牛舍需要被打扫。有N(N <= 10000)头牛愿意打扫,从时间S到时间T,需要花费一些金钱。问若要每时每刻都有牛在打扫,至少需要花多少钱。


思路:1w的数据量不算很大,再加上时限5s,就n^2动归来做。

将牛按时间段的开始排序。

设f[i]为若取第i头牛打扫,到这头牛结束的时间最小花费是多少。

则    f[i] = min(f[i],f[j] + cost[i])  (f[i].st <= f[j].ed + 1)

最后是初值和答案的问题。由于题目中说每时每刻都有牛在打扫,所以f的初值为极大值,在要求开始之前就开始了的牛的初值是这个牛的花费。

动归时更新答案,若要求结束的时候这头牛还在工作,那么就用这头牛更新答案。最后输出答案。


CODE:


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 10010
#define INF 0x3f3f3f3f
using namespace std;

struct Complex{
    int x,y;
    int cost;

    bool operator <(const Complex &a)const {
        if(x != a.x)
            return x < a.x;
        return y < a.y;
    }
    void Read() {
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值