传送门

蒟蒻净做些水题还请大佬见谅

没错这又是个一眼的分组背包。

题意简述:有n棵树,每只树上有aia_iai​只鸟,第iii棵树买一只鸟要花cic_ici​的钱,每买一只鸟可以奖励bbb块钱,从一棵树移动到下一棵树可以奖励xxx块钱,最初有www块钱,求买下的鸟的数量的最大值。


由于钱数很大,考虑按照选择的鸟的方案数来进行dpdpdp。

我们定义状态fi,jf_{i,j}fi,j​表示走过前iii棵树买下来jjj只鸟的剩下钱数的最大值。

最后看使得fn,jf_{n,j}fn,j​合法的jjj的最大值即可。

转移很简单:fi,j=max{fi−1,k−ci∗(j−k)+b∗(j−k)}f_{i,j}=max\{f_{i-1,k}-c_i*(j-k)+b*(j-k)\}fi,j​=max{fi−1,k​−ci​∗(j−k)+b∗(j−k)}

代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
typedef long long ll;
const int N=1e3+5,M=1e4+5;
int n,tmp=0,a[N],up=0;
ll c[N],f[2][M],w,b,x;
int main(){
	memset(f[tmp],-1,sizeof(f[tmp])),n=read(),f[tmp][0]=w=read(),b=read(),x=read();
	for(ri i=1;i<=n;++i)a[i]=read();
	for(ri i=1;i<=n;++i)c[i]=read();
	for(ri i=1;i<=n;++i){
		up+=a[i],tmp^=1,memset(f[tmp],-1,sizeof(f[tmp]));
		ll sum=w;
		for(ri j=0;j<=up;++j){
			for(ri k=0;k<=a[i]&&k<=j;++k){
				if(f[tmp^1][j-k]==-1||c[i]*k>f[tmp^1][j-k])continue;
				f[tmp][j]=max(f[tmp][j],f[tmp^1][j-k]-c[i]*k);
			}
			if(~f[tmp][j])f[tmp][j]=min(f[tmp][j]+x,sum);
			sum+=b;
		}
	}
	for(ri i=up;~i;--i)if(~f[tmp][i])return cout<<i,0;
}

2018.12.14 codeforces 922E. Birds(分组背包)的更多相关文章

  1. 2018.12.08 codeforces 946D. Timetable(背包)

    传送门 题意简述:有一个人上n天课,每天有m个小时的时间安排表(一个01串),为1表示要上课,否则不上课,求出如果可以最多翘kkk节课这nnn天在校待的总时间的最小值(一天必须在所有课上完后才能离开) ...

  2. 2018.12.14 codeforces 932E. Team Work(组合数学)

    传送门 组合数学套路题. 要求ans=∑i=0nCni∗ik,n≤1e9,k≤5000ans=\sum_{i=0}^n C_n^i*i^k,n\le 1e9,k\le 5000ans=∑i=0n​Cn ...

  3. CodeForces - 946D Timetable (分组背包+思维)

    题意 n天的课程,每天有m个时间单位.若时间i和j都有课,那么要在学校待\(j-i+1\)个时间.现在最多能翘k节课,问最少能在学校待多少时间. 分析 将一天的内容视作一个背包的组,可以预处理出该天内 ...

  4. CodeForces - 922E Birds —— DP

    题目链接:https://vjudge.net/problem/CodeForces-922E E. Birds time limit per test 1 second memory limit p ...

  5. 2018.12.14 浪在ACM 集训队第九次测试赛

    浪在ACM 集训队第九次测试赛 B Battleship E Masha and two friends B 传送门 题意: 战船上有占地n*n的房间cells[][],只由当cells[i][j]= ...

  6. [Codeforces 922E]Birds

    Description 题库链接 一条直线上有 \(n\) 棵树,每棵树上有 \(c_i\) 只鸟,在一棵树底下召唤一只鸟的魔法代价是 \(cost_i\) 每召唤一只鸟,魔法上限会增加 \(B\) ...

  7. 2018.12.29 codeforces 940E. Cashback(线性dp)

    传送门 题意:给出一个nnn个数的序列,要求将序列分成若干段,对于一段长度为kkk的自动删去最小的⌊kc⌋\left \lfloor \frac{k}{c} \right \rfloor⌊ck​⌋个数 ...

  8. 2018.12.19 codeforces 1092F. Tree with Maximum Cost(换根dp)

    传送门 sbsbsb树形dpdpdp题. 题意简述:给出一棵边权为1的树,允许选任意一个点vvv为根,求∑i=1ndist(i,v)∗ai\sum_{i=1}^ndist(i,v)*a_i∑i=1n​ ...

  9. 2018.12.15 codeforces 920F. SUM and REPLACE(线段树)

    传送门 线段树入门题. 给你一个序列:支持区间修改成自己的约数个数,区间求和. 实际上跟区间开方一个道理. 2的约数个数为2,1的约数个数为1,因此只要区间的最大值小于3就不用修改否则就暴力修改. 因 ...

随机推荐

  1. c中堆栈的理解

    一直对堆栈的使用以及全局变量.静态全局变量.局部变量.静态局部变量.初始化的全局变量.未初始化的全局变量.初始化的局部变量.未初始化的局部变量理解的不是很清楚,今天抽个时间来总结以下这方面的知识: 1 ...

  2. 【python】入门指南1

    基础的数据结构:int, float, string 注意:python入门系列的文章的示例均使用python3来完成. #!/bin/python a = 1 b = 1.0 c = 'string ...

  3. TZOJ 3315 买火车票(线段树区间最小值)

    描述 Byteotian州铁道部决定赶上时代,为此他们引进了城市联网.假设城市联网顺次连接着n 个市从1 到n 编号(起始城市编号为1,终止城市编号为n).每辆火车有m个座位且在任何两个运送更多的乘客 ...

  4. Delphi: TLabel设置EllipsisPosition属性用...显示过长文本时,以Hint显示其全文本

    仍然是处理多语言中碰到问题. Delphi自2006版以后,TLabel有了EllipsisPosition属性,当长文本超过其大小时,显示以...,如下图: 这样虽然解决显示问题,但很显然,不知道. ...

  5. Pyqt5的事例讲解

    1.第一个gui程序 import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QMainWind ...

  6. sqlserver还原数据库失败,sql2008备份集中的数据库备份与现有的xxx数据库不同

    正常操作发现报标题错误,百度后解决思路如下(@参考文章)转到选项下面,勾选覆盖现有数据库即可

  7. swift - 启动APP 黑屏

    https://blog.csdn.net/chengkaizone/article/details/50478045

  8. Object转为Bigdecimal

    import java.math.BigDecimal; import java.math.BigInteger; public class MathUtils { public static Big ...

  9. echart.js组件编写

    1.传参 <area-chart :chartdata='monitorTimes' :datatype='typeSelected' :dataX = '"tid"' :t ...

  10. 整理 oracle异常错误处理

    5.1 异常处理概念 5.1.1 预定义的异常处理 5.1.2 非预定义的异常处理 5.1.3 用户自定义的异常处理 5.1.4  用户定义的异常处理 5.2 异常错误传播 5.2.1 在执行部分引发 ...