【HBOI2013】Ede的新背包问题

题目

这里写图片描述

题意

就是给你一些物品,一些询问,每次询问要你求少了物品x,时钱为y的最大价值。

分析

其实也就是其他的物品组成y的最大价值。
于是我们可以先预处理出f[i,j],为前i个物品,用了j钱的最大价值,
同理我们再预处理出g[i,j],为i到n个物品,用了j钱的最大价值。
于是对于每次询问,我们可以枚举z,求max(f[x-1,z]+g[x+1,y-z])即可。
其实看起来很简单其实是很巧妙的。

#include<cstdio>
#include<cmath>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int N=1005;
int n,a[N],b[N],c[N],x,y,f[N][N],g[N][N],q,l,ans;
int main(){
    scanf("%d",&n);
    fo(i,1,n) scanf("%d%d%d",&a[i],&b[i],&c[i]);
    fo(i,1,n) 
        fd(j,1000,0) {
            f[i][j]=f[i-1][j];
            fo(k,1,c[i])
                if (j>=k*a[i]) f[i][j]=max(f[i][j],f[i-1][j-k*a[i]]+k*b[i]);
                else break;
        }
    fd(i,n,1) 
        fd(j,1000,0) {
            g[i][j]=g[i+1][j];
            fo(k,1,c[i])
                if (j>=k*a[i]) g[i][j]=max(g[i][j],g[i+1][j-k*a[i]]+k*b[i]);
                else break;
        }
    scanf("%d",&q);
    while (q) {
        scanf("%d%d",&x,&y);ans=0;
        fo(i,0,y) ans=max(ans,f[x][y-i]+g[x+2][i]);
        printf("%d\n",ans);q--;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译 ede 颗粒工厂的 API 是指将 ede 颗粒工厂的应用程序接口(API)代码转换为可执行文件的过程。API 是一种用于不同软件组件之间进行交互的工具,它允许不同的应用程序或系统之间共享数据和功能。 在进行编译之前,首先需要准备好需要编译的 API 代码。这些代码一般是由开发人员编写的,包含了对 ede 颗粒工厂所需功能的定义和实现。开发人员可以使用不同的编程语言编写这些代码,如C++、Python等。 编译 API 代码的过程主要包括以下几个步骤: 1. 源代码预处理:这个步骤主要是对 API 代码进行预处理,包括处理宏定义、条件编译等。预处理器会根据指令对源代码进行处理,并生成处理后的代码。 2. 编译:在这一步中,编译器将预处理后的代码转换为机器可执行的目标代码。编译器会检查代码的语法和语义的正确性,并将代码转换为机器语言的形式。 3. 链接:链接是将编译后的目标代码与其他代码文件(如库文件)进行整合的过程。链接器会根据代码中的函数调用和引用关系,将多个目标代码文件组合成一个可执行文件。 完成编译后,我们就可以得到一个可执行文件,该文件包含了 API 的功能和接口定义。在开发过程中,其他应用程序可以通过调用这些接口来实现与 ede 颗粒工厂的交互。 需要注意的是,由于 ede 颗粒工厂的 API 可能是面向特定平台或操作系统的,所以在进行编译前需要确保安装了相应的开发环境和工具链。编译过程中的详细步骤和操作可能因平台和编程语言的不同而有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值