零件加工 贪心 题解

1019: B06-贪心-零件加工[提高组]

时间限制: 1 Sec  内存限制: 128 MB
提交: 24  解决: 7
[提交] [状态] [讨论版] [命题人:外部导入]

题目描述

工匠小K最近有n个零件需要加工。每个零件都需要ti天的时间来完成,每个零件每延迟一天加工都要缴纳一定的罚金si。延迟的天数为从今天算起到该工作开始的那天,第一个零件加工没有罚金。现在小K想知道怎样安排加工顺序可以使他要交的罚金最少,最少是多少。
      这个数可能会很大,请输出这个数对m取模后的结果。

输入

输入文件名为process.in。
输入第一行为一个整数n,表示需要加工的零件总数。
第二行为一个整数m,表示答案要对m取模。
第3~n+2行,每行两个整数ti和si。

输出

输出文件名为process.out。
输出仅一行,一个整数,表示小K最少要缴纳的罚金对m取模的结果。

样例输入

2
100
2 33
33 2

样例输出

4

提示

【输入输出样例解释1】

先加工第一个,需要2天时间,再加工第二个。需要缴纳的罚金为2×2=4。

【输入输出样例2】process.in                       

4

100

3 3

6 4

2 2

8 5

process.out

81

 

【输入输出样例解释2】

如果按照1→2→3→4的顺序进行加工,需要缴纳的罚金为0×3+3×4+(3+6)×2+

(3+6+2)×5=85;

最佳方案是3→1→2→4,此时需要缴纳的罚金为0×2+2×3+(2+3)×4+(2+3+6)×5=81。

【数据范围】

对于40%的数据,0<n≤10,000,0<ti,si≤10,000;

对于80%的数据,0<n≤100,000,0<ti,si≤2×109,0<m≤108
对于100%的数据,0<n≤100,000,0<ti,si≤2×109,0<m≤1018

来源/分类

B06-贪心

这一道题看上去好难的样子鸭 加油哦

上面是老师发的一段讲解()(《若有》《所思》)

那么既然正解都出来了 卡一卡试试吧

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct Node{
    ll t,s;
}arr[100005];
int cmp(Node a,Node b){
    if(a.t*b.s<b.t*a.s)
        return 1;
    return 0;
}
ll cheng(ll a,ll b,ll m){
    ll ans=0,t=a;
    while(b!=0){
        if(b&1) ans=(ans+t)%m;
        t=(t+t)%m;
        b>>=1;
    }
    return ans;
}
int main(){
    ll n,m;
    cin>>n>>m;
    for(ll i=1;i<=n;i++)
        scanf("%lld%lld",&arr[i].t,&arr[i].s);
    sort(arr+1,arr+n+1,cmp);
    ll sum=0,ans=0;
    for(int i=1;i<=n;i++){
        ans=(ans+cheng(arr[i].s,sum,m))%m;
        sum+=arr[i].t;
    }
    cout<<ans;
    return 0;
}

原文地址:https://www.cnblogs.com/Tidoblogs/p/11260264.html

时间: 2024-10-02 06:58:18

零件加工 贪心 题解的相关文章

贪心-零件加工

题目描述 工匠小K最近有n个零件需要加工.每个零件都需要ti天的时间来完成,每个零件每延迟一天加工都要缴纳一定的罚金si.延迟的天数为从今天算起到该工作开始的那天,第一个零件加工没有罚金.现在小K想知道怎样安排加工顺序可以使他要交的罚金最少,最少是多少. 这个数可能会很大,请输出这个数对m取模后的结果. 输入 输入文件名为process.in. 输入第一行为一个整数n,表示需要加工的零件总数. 第二行为一个整数m,表示答案要对m取模. 第3~n+2行,每行两个整数ti和si. 输出 输出文件名为

POJ 1328 Radar Installation 贪心题解

本题是贪心法题解,不过需要自己观察出规律,这就不容易了,很容易出错. 一般网上做法是找区间的方法. 这里给出一个独特的方法: 1 按照x轴大小排序 2 从最左边的点循环,首先找到最小x轴的圆 3 以这个圆判断可以包括右边的多少个圆,直到不可以包括下一个点,那么继续第2步,画一个新圆. 看代码吧,应该很清晰直观的了. 效率是O(n),虽然有嵌套循环,但是下标没有重复,一遍循环就可以了,故此是O(n). #include <stdio.h> #include <cmath> #incl

HDU 1051 Wooden Sticks 贪心题解

本题一看就知道是最长不减序列了,一想就以为是使用dp解决了.不过那是个错误的思路. 我就动了半天没动出来.然后看了看别人是可以使用dp的,不过那个比较难证明其正确性,而其速度也不快.故此并不是很好的解决方法. 所以我就直接硬算,硬模拟选择出非减子序列,选完就出答案了. 思路: 1 按照长度排序 2 按照不减原则选择重量,选一个,消灭一个. 最后消灭完了,就处理完毕,答案就自然出来了. 原来是一道披着dp的外套的模拟题啊!一道伪装成难题的简单题. 代码也可以写的非常简洁: #include <st

K - Kia&#39;s Calculation(贪心)

Kia's Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Doctor Ghee is teaching Kia how to calculate the sum of two integers. But Kia is so careless and alway forget to carry a number

2019.11.09题解

写在前面: 出题人为啥三道题一个中文两个英文感觉怪怪的 A. 合并集合 标签: 区间Dp 题解: 区间Dp的裸题,刚开考的时候有点紧张没想到Dp,打了一个假的贪心,后来想到Dp的时候觉得我打贪心就是个傻子 f[i][j]代表处理完[i,j]的最大收益: f[i][j]=max{f[i][k]+f[k+1][j]+g[i][k]*g[k+1][j]} 其中g[i][j]代表[i,j]的不同元素个数,$ O(n^2) $预处理即可,总复杂度$ O(n^3) $ B. climb 标签: 二分+贪心

20170612测试

问题 A: 装果子 时间限制: 1 Sec  内存限制: 128 MB提交: 96  解决: 54 题目描述 果园里有n颗果树,每棵果树都有一个编号i(1≤i≤n).小明已经把每棵果树上的果子都摘下来堆在了这棵树的下方,每棵树下方的果子体积为ai. 现在小明将拿来m个袋子把这些果子都装进袋子里.每个袋子的体积为v.小明会按照如下规则把果子装进袋子里: (a)从第1棵果树开始装起,由1到n一直装到第n棵果树. (b)如果这棵果树下的果子能全部装进当前这个袋子,就装进去:如果不能,就关上当前这个袋子

解一元一次方程

实际问题与一元一次方程 一般步骤:1.审.审清题意,   2.设.设未知数   3.列.根据等量关系列方程   4.解.解方程   5.答.写出答案 解一元一次方程一般步骤:   1.去分母   2.去括号   3.移项   4.合并同类项   5.化系数为1 题1:有一批零件加工任务,甲单独加工需要20小时,乙单独加工需要10小时,甲加工了一部分后另有任务,剩下的任务由乙单独完成,乙比甲少加工了5小时,求甲加工了几个小时? 设 甲加工了  (x+5)小时 乙加工了 x小时 x/10 + (x

jQuery/CSS3类似阿里巴巴的商品导航菜单实现教程

有两天没发表文章了,今天来说说利用jQuery和CSS3制作一款类似阿里巴巴左侧商品菜单导航,这款菜单看起来非常大气,可以展示非常多的产品类目,如果你在设计电子商务网站,不妨可以拿来参考,一下是效果图: 我们也可以到这里来查看这款菜单的DEMO演示. 接下来还是分析一下源代码,源码由HTML.CSS和jQuery组成,先来看看HTML,东西很多,但结构非常简单: <div class="sidebar"> <div class="sidebar_top si

FTI.v5.4.for.CATIA.V5R22-R25金属薄板软件

CD-ADAPCO.STAR-CCM+10.06.010.WIN.LINUX.64BIT新一代通用计算流体力学(CFD)分析软件 CSI.SAFE.V2014.1.1中文版 结构和建筑软件 DELCAM.FEATURECAM.2016.R2机械加工软件 CONCEPTS.NREC.SUITE.V8.4.9.0(AXCENT,AXCENT,AXIAL,COMPAL,FANPAL,PUMPAL,RITAL,TURBOMATCH) FTI.v5.4.for.CATIA.V5R22-R25 MSC.DY