zoj 1200 Mining

这道题被划到了动态规划里面去了,结果就是一道模拟题,懒了一点,直接用stl的优先队列,重载了一下运算符,写的时候保证只能一个在采,因为如果需要的采的次数比可以生产的次数少,那么生产的次数等于需要采的次数,算个小剪枝。

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
#include<string>
using namespace std;
int s,w,c,k,m;
struct node
{
    int t;
    node(int a):t(a) {}
};

bool operator <(const node &t1,const node &t2)
{
    return t1.t>t2.t;
}
priority_queue<node> q;
int solve()
{
    while(!q.empty())
            q.pop();
        int ans=(10000-0.5)/c+1;
        k=min(k,ans);
        int f=0;
        for(int i=1;i<=k;i++)
        q.push(node(m*i+s));
        int aa=-1;
        while(!q.empty())
        {
            node x=q.top();
            q.pop();
            if(x.t<aa)
                x.t=aa;
            aa=x.t+w;
            f++;
            if(f==ans)
                return x.t+w+s;
            q.push(node(x.t+w+s+s));
        }
}

int main()
{
    // freopen("input.txt","r",stdin);
    while(scanf("%d%d%d%d%d",&s,&w,&c,&k,&m)==5)
    {
        int  res=solve();
        printf("%d\n",res);
    }
}

再谈一下c++运算符重载,一篇博客的例子,优先队列的写法有很多,我还是习惯于结构体加单独重载函数,看起来比较清晰,好写。

时间: 2024-11-04 21:58:29

zoj 1200 Mining的相关文章

zoj题目分类

饮水思源---zoj 转载自:http://bbs.sjtu.edu.cn/bbscon,board,ACMICPC,file,M.1084159773.A.html 注:所有不是太难的题都被归成了“简单题”,等到发现的时候已经太晚了,我太死脑筋 了……:( 有些题的程序我找不到了,555……:( SRbGa的题虽然都很经典……但是由于其中的大部分都是我看了oibh上的解题报告后做 的,所以就不写了…… 题目排列顺序没有规律……:( 按照个人感觉,最短路有的算做了DP,有的算做了图论. 有些比较

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

约分差束 例题 ZOJ 2770 火烧连营

题目来源:ZOJ Monthly, October 2006, ZOJ2770题目描述:大家都知道,三国时期,蜀国刘备被吴国大都督陆逊打败了.刘备失败的原因是刘备的错误决策.他把军队分成几十个大营,每个大营驻扎一队部队,又用树木编成栅栏,把大营连成一片,称为连营.让我们回到那个时代.陆逊派了很多密探,获得了他的敌人-刘备军队的信息.通过密探,他知道刘备的军队已经分成几十个大营, 这些大营连成一片 (一字排开), 这些大营从左到右用 1…n 编号.第 i 个大营最多能容纳 Ci 个士兵.而且通过观

图论 500题——主要为hdu/poj/zoj

转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并查集======================================[HDU]1213   How Many Tables   基础并查集★1272   小希的迷宫   基础并查集★1325&&poj1308  Is It A Tree?   基础并查集★1856   More i

ZOJ 1133

Smith数的定义是各位数字之和与它的各个质因数(可以重复)的各位数字之和的总和相同的数,且不是素数. 题目本身是一道水题,数据尤其水. 下面的代码中加了一个优化: 先将所有询问按询问的数字升序排序,处理某个询问A时,如果结果是B,那么对其后询问值小于B的所有询问,都直接 给出答案为B. 例如: 23 24 25 26 27 0 在处理23时得到58,由于后面四个数都小于58,于是后面四个询问直接得到答案58而不必重复劳动. 最后再将所有询问按原先次序排序即可. 这样总体的平均时间复杂度介于O(

ZOJ 3705 Applications 模拟

#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<sstream> #include<cmath> #include<climits&g

hdu 2448 Mining Station on the Sea【网络费用流】

Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2371    Accepted Submission(s): 732 Problem Description The ocean is a treasure house of resources and the development

概率dp ZOJ 3640

Help Me Escape Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice ZOJ 3640 Appoint description:  System Crawler  (2014-10-22) Description Background     If thou doest well, shalt thou not be accepted? an

zoj 2156 - Charlie&#39;s Change

题目:钱数拼凑,面值为1,5,10,25,求组成n面值的最大钱币数. 分析:dp,01背包.需要进行二进制拆分,否则TLE,利用数组记录每种硬币的个数,方便更新. 写了一个 多重背包的 O(NV)反而没有拆分快.囧,最后利用了状态压缩优化 90ms: 把 1 cents 的最后处理,其他都除以5,状态就少了5倍了. 说明:貌似我的比大黄的快.(2011-09-26 12:49). #include <stdio.h> #include <stdlib.h> #include <