zoukankan      html  css  js  c++  java
  • 【普及组模拟赛】作业

    题目描述

    光光上了高中,科目增多了。在长假里,光光的老师们都非常严厉,都给他布置了一定量的作业。假期里,光光一共有的时间是 k 小时。在长假前,老师们一共给光光布置了 n份作业,第 i 份作业需要的时间是 ti 小时。但是由于老师们互相不商量,因此光光有可能不能完成老师的作业。当可能不能完成老师的作业时,光光就事后去向老师说明,然后被老师批评一顿了事。对于一件作业,只有 2 种情况:完成或者不完成(快要完成也算不完成)。
    如果没完成,受到批评是天经地义的。但是,不同的作业对于光光来说,批评的力度是不同的。第 i 件作业如果没完成,就要受到 pi 个单位的批评。多次这样之后,光光想要在长假前就知道他至少会受到多少个单位的批评。你能帮助他吗?

    输入

    输入文件的第一行只有一个数字 k。
    第二行只有一个数字 n。
    接下来 n 行,每行两个数字,分别是 ti 和 pi,两个数字之间用一个空格分开。

    输出

    输出文件 homework.out 仅包含一行,是一个数字,代表了光光最少受到的批评。

    样例输入

    5
    3
    2 6
    1 3
    4 7

    样例输出

    6

    数据范围限制

    【数据范围】
    100%的数据中, k<=100000, ti<=10000, pi<=10000;
    30%的数据中, n<=20;
    100%的数据中, n<=500。

    分析
    这题其实就是一个0/1背包
    先就总和,再求最大可以减少的批评,最后输出它们的差。

    程序:

    uses
    math;
    var
    k,n,i,j:longint;
    tj:int64;
    f:array[0..100000]of int64;
    w,v:array[0..600]of longint;
    begin
        assign(input,'homework.in');
        reset(input);
        assign(output,'homework.out');
        rewrite(output);
        readln(k);
        readln(n);
        tj:=0;
        for i:=1 to n do
        begin
            readln(w[i],v[i]);
            tj:=tj+v[i];
        end;
        for i:=1 to n do
        for j:=k downto w[i] do
        f[j]:=max(f[j],f[j-w[i]]+v[i]);
        write(tj-f[k]);
        close(input);
        close(output);
    end.
    
    
  • 相关阅读:
    C++实现base64编码
    php实现base64编码
    美团2016研发工程师笔试题(绑鞋带问题)
    URL encode 与 URL decode 的C语言实现
    常用排序算法集合-C实现
    用文件实现计算器要求多进程同时写
    vim操作命令-笔记
    Can't connect to local MySQL server through socket
    小程序页面跳转数据丢失
    Vue路由 --登录状态的判断
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500006.html
Copyright © 2011-2022 走看看