Bzoj1899: [Zjoi2004]Lunch 午餐

题面

传送门

Sol

首先显然吃饭久的要排在前面
之后再来分配队伍,设\(f[i][j]\)表示到第\(i\)个人,\(A\)队伍要等\(j\)的最小吃完饭时间
那么就是一个简单的背包吧。。。

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
# define Sqr(x) ((x) * (x))
using namespace std;
typedef long long ll;
const int _(205);

IL ll Read(){
    RG ll x = 0, z = 1; RG char c = getchar();
    for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
    for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
    return x * z;
}

int n, a[_], b[_], sum[_], f[_][_ * _], ans = 2e9, id[_];

IL bool Cmp(RG int x, RG int y){  return b[x] > b[y];  }

int main(RG int argc, RG char* argv[]){
    n = Read();
    for(RG int i = 1; i <= n; ++i) a[i] = Read(), b[i] = Read(), id[i] = i;
    sort(id + 1, id + n + 1, Cmp);
    for(RG int i = 1; i <= n; ++i) sum[i] = sum[i - 1] + a[id[i]];
    Fill(f, 63); f[0][0] = 0;
    for(RG int i = 1; i <= n; ++i)
        for(RG int j = 0; j <= sum[i]; ++j){
            f[i][j] = max(f[i - 1][j], (sum[i] - j) + b[id[i]]);
            if(j >= a[id[i]]) f[i][j] = min(f[i][j], max(f[i - 1][j - a[id[i]]], j + b[id[i]]));
        }
    for(RG int i = 0; i <= sum[n]; ++i) ans = min(ans, f[n][i]);
    printf("%d\n", ans);
    return 0;
}

原文地址:https://www.cnblogs.com/cjoieryl/p/8318872.html

时间: 2024-10-20 05:47:06

Bzoj1899: [Zjoi2004]Lunch 午餐的相关文章

【BZOJ1899】[Zjoi2004]Lunch 午餐 贪心+DP

[BZOJ1899][Zjoi2004]Lunch 午餐 Description 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的.另外每个人吃饭的速度也不尽相同,所以吃饭花费的时间也是可能有所不同的. THU ACM小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排

【bzoj1899】[Zjoi2004]Lunch 午餐 dp

题目描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的.另外每个人吃饭的速度也不尽相同,所以吃饭花费的时间也是可能有所不同的. THU ACM小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排队打饭,二号队伍到二号窗口去排队打饭.每个人打完饭后立刻开始吃,所有人都

[bzoj 1899][ZJOI2004]lunch 午餐

Description 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不同,打饭所要花费的时间是因人而异的.另外每个人吃饭的速度也不尽相同,所以吃饭花费的时间也是可能有所不同的. THU ACM小组的吃饭计划是这样的:先把所有的人分成两队,并安排好每队中各人的排列顺序,然后一号队伍到一号窗口去排队打饭,二号队伍到二号窗口去排队打饭.每个人打完饭后立刻开

快手健康早午餐轻松做

快手健康早午餐轻松做 不用早起的工作日,睡一个小懒觉起来发现已经快到中午 拉开窗帘也是满满阳光洒进来,这样的好天气好心情索性做一顿brunch~ 快手又健康的橄榄油蔬菜配吐司,再喝点牛奶或咖啡,谁说工作日不能宠爱自己. 准备的食材很简单:你冰箱里剩下的所有蔬菜 我用的是青椒红椒和紫洋葱,还有一些生菜. 调味料:橄榄油,黑胡椒,盐.也可以准备一些沙拉酱 1:把食材都切成好入口的小丁备用 2:吐司烤脆,依据自己的口味来,有些人喜欢吃松软的吐司可以不用烤脆. 3:锅烧热倒入橄榄油 4:翻炒你的蔬菜丁加

练习你的听说读写能力

1. 练习听力 美国国家公共广播电台 NPR ( 请大家在百度搜索 "npr" ,搜索结果的首条就是 NPR ) . 特点:标准美式英语. 建议:每天花三十分钟左右,反复听英语广播,这是听力过关的必经之路.点击网页中左边“ BROWSE TOPICS ”下面的“ News ”选项.选择自己有兴趣的新闻链接,点开“ Listen Now ”左边的红色小喇叭图标,然后反复听该新闻的广播. 英国广播公司新闻频道 BBC ( 请大家在百度搜索 "news.bbc" ,搜索结

[No00005B]理解26个英文字母的原始含义-例词

理解26个英文字母的原始含义,不仅可以加强我们的语感,而且对我们背单词是大有帮助的.那么26个字母的象形之处到底在哪呢?下面是各字母所对应的含义,如果用示图表达出来,将会更加清楚. A-牛头 B-房子.鸟嘴 C,G-房角 D-门 E-举着双手的人 F-沙粒 H-荷花 I-手 K-皇帝 L-鞭子 M-水or波浪 N-鼻子 O-圆的东西 P-嘴 Q,R-人头 S-太阳,沙丘 T-十字架 V-龙 X-十字架 Z-闪电 A aa, an 一(个,件)(an 用于元音音素开头的词前) (3A1)a car

牛排与酒英语词汇

breakfast 早餐 lunch 午餐 brunch 早午餐 supper 晚餐 late snack 宵夜 dinner 正餐 ham and egg 火腿肠 buttered toast 奶油土司 French toast 法国土司 muffin松饼 cheese cake 酪饼 white bread 白面包 brown bread 黑面包 French roll 小型法式面包 appetizer 开胃菜 green salad 蔬菜沙拉 onion soup 洋葱汤 potage 法

words2

餐具:coffee pot 咖啡壶coffee cup 咖啡杯paper towel 纸巾napkin 餐巾table cloth 桌布tea -pot 茶壶tea set 茶具tea tray 茶盘caddy 茶罐dish 碟plate 盘saucer 小碟子rice bowl 饭碗chopsticks 筷子soup spoon 汤匙knife 餐刀cup 杯子glass 玻璃杯mug 马克杯picnic lunch 便当fruit plate 水果盘toothpick 牙签中餐:bear's

English trip -- VC(情景课)9 A Get ready

She is doing homwork He is doing laundry He is drying the dishes She is making lunch She is making the bed He is washing the dishes # 现在进行时 人称代词                                          Be动词             动词+ing形式 I