首页 > 其他分享 >题解:P3891 [GDOI2014] 采集资源

题解:P3891 [GDOI2014] 采集资源

时间:2024-12-06 12:11:29浏览次数:5  
标签:cout int 题解 P3891 GDOI2014 资源

P3891 [GDOI2014] 采集资源

题意简述:

开始时你有数量为 \(m\) 的资源,有 \(n\) 种“苦工”可以不限次数地建造,每种苦工都有一个花费 \(a\) ,和一个效率 \(b\) ,要求最小化资源数量到达 \(t\) 的时间

Solution:

我们考虑先对于每一种花费 \(i\) 最大化它的“单位时间内产生的资源的数量”,记为 \(w_i\) 这可以用完全背包解决。

然后我们记状态 \(f[d][k]\) 为在第 \(d\) 天时,拥有 \(k\) 的资源时的最大效率,然后我们就可以对于每一个状态 \((d,k)\) 去枚举花费 \(j\) 然后维护第 \(d+1\) 天的 \(f\) 数组。状态转移方程为:

\(f[d+1][k-j+w[j]+f[d][k]]=\max(f[d+1][k-j+w[j]+f[d][k]],f[d][k]+w[j])\)

然后判断结束的标志就是要么 \(f[d][t]\) 合法,要么是在转移时 \(f[d+1][k-j+w[j]+f[d][k]]\) 合法且 \(k-j+w[j]+f[d][k]\ge t\)

时间复杂度 \(O(ans*t^2)\) 而且跑不满。

Code:

#include<bits/stdc++.h>
const int N=105;
const int M=1005;
int w[M],f[N][M];
using namespace std;
int n,m,t;
inline void init()
{
    for(int i=0;i<N;i++)for(int j=0;j<M;j++)f[i][j]=-1;
}
inline void Max(int &x,int y)
{
    x = x>y ? x : y;
}
inline int Min(int x,int y)
{
    return x<y ? x : y;
}
void work()
{
    cin>>n>>m>>t;
    if(m>=t){cout<<0;return ;}
    for(int i=1,x,y;i<=n;i++)
    {
        scanf("%d%d",&x,&y);
        x=Min(x,1000);
        y=Min(y,1000);
        for(int j=x;j<=t;j++)
        {
            Max(w[j],w[j-x]+y);
        }
    }
    int d=0;
    init();
    f[0][m]=0;
    while(d<=1000)
    {
        if(~f[d][t]){cout<<d;return;}
        for(int k=0;k<=t;k++)if(~f[d][k])
        for(int j=0;j<=k;j++)
        {
            if(k-j+w[j]+f[d][k]>=t){cout<<d+1;return;}
            Max(f[d+1][k-j+w[j]+f[d][k]],f[d][k]+w[j]);
        }
        d++;
    }
}
int main()
{
    //freopen("P3891.in","r",stdin);
    //freopen("P3891.out","w",stdout);
    work();
    return 0;
}

标签:cout,int,题解,P3891,GDOI2014,资源
From: https://www.cnblogs.com/LG017/p/18590469

相关文章

  • MQ消息乱序问题解析与实战解决方案
    1.背景在分布式系统中,消息队列(MQ)是实现系统解耦、异步通信的重要工具。然而,MQ消费时出现的消息乱序问题,经常会对业务逻辑的正确执行和系统稳定性产生不良影响。本文将详细探讨MQ消息乱序问题的根源,并提供一系列在实际应用中可行的解决方案。2.MQ消息乱序问题分析常见的MQ消息......
  • P7206 [COCI2019-2020#3] Lampice 题解
    显然可以对答案奇偶分别二分,判断用点分治。考虑对每个点记录到当前分治中心的路径正着和倒着的hash值,那么两个点之间的路径是回文路径可以用一个简单的式子表示,移项一下把跟一个点有关的值放到一边,用unordered_map记录/查询即可,需要卡常,时间复杂度\(\mathcalO(n\log^2n)\)。......
  • CCF-CSP真题 《201412_2_Z字形扫描》Python思路题解
    题目描述:在图像编码的算法中,需要将一个给定的方形矩阵进行 Z 字形扫描(ZigzagScan)。给定一个 n×n的矩阵,Z字形扫描的过程如下图所示:对于下面的 4×4 的矩阵,1539375694647313对其进行 Z 字形扫描后得到长度为 16 的序列:1539739547......
  • 2023年12月GESPC++二级真题解析
    一、单选题(每题2分,共30分)题目123456789101112131415答案CADDDADCDBCDCBB1.以下不可以做为C++变量的是()。A.FiveStarB.fiveStarC.5StarD.Star5【答案】C【考纲知识点】变量的定义与使用(二级考纲知识点范畴),具体涉及到变量名的命名规则。在C++语言中,变量名有严格......
  • BUUCTF Pwn jarvisoj_level2_x64 题解
    1.下载checksec64位用IDA64打开SHIFT+F12查找字符串找到了binsh函数里面也有system进主函数看看看到了栈溢出漏洞这是64位程序所以构造ROP链时要用rdi传参+用ret栈平衡找到这两个的地址:构造exp:运行得到flag  flag{4b1340f5-06be-4377-9630-fd2c77f016......
  • P9142 [THUPC 2023 初赛] 欺诈游戏 题解
    P9142[THUPC2023初赛]欺诈游戏题面这个游戏名叫《走私游戏》。游戏规则大概是这样的:一名玩家扮演走私者,一名玩家扮演检察官。走私者可以将\(x\)日元(\(x\)为\([0,n]\)内的整数,由走私者决定)秘密放入箱子中,而检查官需要猜测箱子中的金额。假设检察官猜了\(y\)(\(y\)也必......
  • ybt2.5章AC自动机题解
    算法理解即在字典树上跑kmpT1:根据这个结论我自己手搓了一个AC自动机上去,喜提TLE我是如何操作的呢?我当时的想法是这样的:我们把字典树从根到该节点形成的链看成是一个模式串与文本串进行匹配,然后就用一个dfs来传递j就可以解决了然后我打开书一看到这幅图,立马就不淡定了我df......
  • NOIP2024 简要题解
    T1编辑字符串(edit)考虑求出\(x\)表示两个串最多能匹配多少对\(0\)。设两个串\(0\)的个数加起来为\(s\),那么会发现恰好有\(s-2x\)个位置是不匹配的,我们只需要最小化\(s-2x\)即最大化\(x\)即可。可以直接贪心求解,枚举每个位置判断是否能匹配一对\(0\),处理出两个......
  • Codeforces Round 990 (Div. 2) 题解 (A ~ E)
    A.AlyonaandaSquareJigsawPuzzle模拟即可#include<bits/stdc++.h>usingi64=longlong;voidsolve(){ intn;std::cin>>n; intcur=0; intans=0; for(inti=0,j=1;i<n;i++) { intx;std::cin>>x; cur+=x; ......
  • 【题解】CF2047
    A显然每次完整地放完都是一个正方形,正方形的边长每次+2,初始值为1所以只需要check每天的块数是否是奇数的平方,然后再做前缀和即可B显然字母出现顺序不重要而出现次数重要,直接放桶并不考虑出现次数为0的数考虑多重集意义下的排列,设序列总长度为\(n\),第\(i\)钟数出......