sgu-259 Printed PR

题目大意:

有N(N<=100)个产品,每个产品有两个属性Ti,Li,表示做这个产品的所需时间和递送时间,递送必须在产品完成后开始,在递送时可以进行下一个产品的制作。同一时间内只能有一个产品在制作,但是可以有多个产品递送,问递送完所有的产品的时间。

解题思路:

经典贪心题目,白书上好像有原题吧。

思路就是将所有的产品按递送时间从大到小排序,然后直接从前往后做就行了。

证明:

首先,显然完成所有产品的时间是确定的。然后我们考虑交换两个产品的制作顺序。

1.如果Li>Li+1,那么总时间就是Ti+Ti+1+max{Li+1,Li?Ti+1},如果交换之后就是Ti+Ti+1+max{Li,Li+1?Ti},由于Li>Li+1所以max{Li+1,Li?Ti+1}<=Li<=max{Li,Li+1?Ti},显然时间要变长。

AC代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>

using namespace std;

int N;
struct task_
{
    int T,L;
}task[110]={{0,0}};

bool cmp(struct task_ a1,struct task_ a2)
{return a1.L>a2.L;}

int main()
{
    scanf("%d",&N);
    for(int i=1;i<=N;i++)
        scanf("%d",&task[i].T);
    for(int i=1;i<=N;i++)
        scanf("%d",&task[i].L);
    sort(task+1,task+N+1,cmp);
    int st=0;
    int ans=0;
    for(int i=1;i<=N;i++)
    {
        st+=task[i].T;
        ans=max(ans,st+task[i].L);
    }
    cout<<ans<<endl;
    return 0;
} 
时间: 2024-10-05 10:12:49

sgu-259 Printed PR的相关文章

今日SGU 5.14

//SGU 131 还没完全想清楚 留坑 SGU 259 题意:一个机器处理n个任务,每个任务有时间t和传送时间l 收获:贪心 #include<bits/stdc++.h> #define de(x) cout<<#x<<"="<<x<<endl; #define dd(x) cout<<#x<<"="<<x<<" "; #define

SGU 167.I-country

时间限制:0.75s 空间限制:6M 题意: 在一个n*m(n,m<=15)的网格中,每个格子有一个值,现在从网格中取出k(k<=n*m)个,保证在选中的格子中从任意一个格子去另外的所有格子最多只用到四种(上,下,左,右)操作中的两种,并使得到的值最大.输出该值和选中的格子坐标. Solution 从选中的网格的任意一个去所有格子只用两种操作: 左图一种满足条件的网格集合,右图的(1,3)到(3,2)必需使用(左,下,右)三种操作才能到达,是不符合要求的. 注意到,满足条件的网格集合一定不会出

SGU 160.Magic Multiplying Machine

时间限制:0.5s 空间限制6M 题意:        给出n个(1<=n<=10000)1~m(2<m<1000)范围内的数,选择其中任意个数,使它们的 乘积 模m 最大,输出最大的分数,和选择的数的编号. Solution:               DP,               从第一个数开始,f[]记录当前有哪些数可以得到.如果k可以得到令f[k]=1;               再记录路径,和更新ans.               如果单纯使用二重循环将是N*

【SGU 390】Tickets (数位DP)

Tickets Description Conductor is quite a boring profession, as all you have to do is just to sell tickets to the passengers. So no wonder that once upon a time in a faraway galaxy one conductor decided to diversify this occupation. Now this conductor

ACM: SGU 101 Domino- 欧拉回路-并查集

sgu 101 - Domino Time Limit:250MS     Memory Limit:4096KB     64bit IO Format:%I64d & %I64u Description Dominoes – game played with small, rectangular blocks of wood or other material, each identified by a number of dots, or pips, on its face. The bl

SGU 495. Kids and Prizes( 数学期望 )

题意: N个礼品箱, 每个礼品箱内的礼品只有第一个抽到的人能拿到. M个小孩每个人依次随机抽取一个,  求送出礼品数量的期望值. 1 ≤ N, M ≤ 100, 000 挺水的说..设f(x)表示前x个人都选择完成后礼品剩下数的期望值( f(0) = N ), 那么f(x) = f(x - 1) - f(x - 1) / N = f(x - 1) * (N - 1) / N (显然). 那么答案就是等于 N - N * [(N - 1) / N]^M. 后面部分可以用快速幂优化.时间复杂度O(l

SGU 116 Index of super-prime 数论+完全背包+输出方案

题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=116 题意好晦涩 给你一个不超过一万的数 问它最少可以用多少个“超级素数”来表示 使“超级素数”之和等于它 如果无法这样表示 输出0 否则 按非降序形式输出方案 数论部分就模板的问题 没什么说的 完全背包方面也很常规 说说[输出方案] 背包九讲的伪码给的是二维dp[]的方法 实际上稍加改动就可以用在一维数组上 用一个rec[]记录dp[]的当前状态是从哪个状态转移而来(即上一个状态) 通过

SGU 乱搞日志

SGU 100 A+B :太神不会 SGU 101 Domino: 题目大意:有N张骨牌,两张骨牌有两面有0到6的数字,能相连当且仅当前后数字相同,问能否有将N张骨牌连接的方案?思路:裸的欧拉回路,注意自环,连通 1 //sgu101 2 #include<iostream> 3 #include<cstdio> 4 #include <math.h> 5 #include<algorithm> 6 #include<string.h> 7 #i

SGU 275 To xor or not to xor (高斯消元)

题目地址:SGU 275 首先,贪心的思想,每一二进制位上要尽量是1,而能不能是1用高斯消元来解决.当该位有一个可以使之为1的变元时,就说明这位可以为1,而且令该变元控制该位,然后向低位消元. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h>