codeforce 461DIV2 E题
题意
有n棵树排成一排,每个树上都有c[i]只小鸟,只有站在树下才可以召唤小鸟,在i-th树下召唤k(k<=c[i])只小鸟需要消耗cost[i]*k的法力值,但是每召唤一只小鸟可以将法力值的上限增加B,每次到下一棵树时候,法力值会恢复X(但是不会超过上线),初始时的法力值和上限都是W。
分析
emmm这个题我不会,但感觉真的棒!乍一看很像背包有没有!一开始我想dp[a][b]表示在状态(a,b)时捉到小鸟的最大值,(a,b)代表第a棵树,当前法力值为b,法力值的上限可以通过捉到的小鸟数得到,那么转移就很显然dp[a][b]=max(dp[a][b],dp[a-1][b+k*cost[a]-X]+k)其中b+k*cost[a]<=W+dp[a-1][b+k*cost[a]-X]*B;如果是这样这道题就是简单的背包了,但是注意数据范围!数组开不下!!!再回去认真审题(zhao ti jie),发现有一个提示是c[i]的和小于等于十的四次方,这是在暗示我们将它加入到状态中啊!于是我们就可以这样写dp;
dp[a][b]为在状态(a,b)时剩余的最大能量值,状态(a,b)代表在第a棵树下,已经抓到了b只小鸟。那么初始状态便为dp[0][0]=W;
状态转移为dp[a][b]=max(dp[a][b],min(dp[a-1][b-k]+X,W+(b-k)*B)- cost[a]*k);初始时可以将所有的dp数组赋值为-inf;最后i从大到小找dp[n][i],当它的值大于等于0的时候(或者不等于-INF),当前i就是答案
对了,这道题不用long long 的话会在第7组WA。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int INF=;
const int maxn=+;
const int maxc=+;
long long n,W,B,X;
long long c[maxn],cost[maxn];
long long dp[maxn][maxc];
int main(){
//scanf("%d%d%d%d",&n,&W,&B,&X);
cin>>n>>W>>B>>X;
long long M=;
for(int i=;i<=n;i++){
cin>>c[i];
M+=c[i];
}
for(int i=;i<=n;i++)scanf("%d",&cost[i]); //cin>>cost[i];
for(int i=;i<=n;i++)
for(int j=;j<=M;j++)
dp[i][j]=-INF;
dp[][]=W;
for(int i=;i<=n;i++){
for(int j=;j<=M;j++){
for(int k=;k<=c[i];k++)
if(k<=j&&min(dp[i-][j-k]+X,W+(j-k)*B)>=cost[i]*k)
dp[i][j]=max(dp[i][j],min(dp[i-][j-k]+X,W+(j-k)*B)-cost[i]*k);
}
} int ans=;
for(int i=M;i>=;i--){
if(dp[n][i]>=){
ans=i;
break;
}
}
printf("%d",ans);
return ;
}
codeforce 461DIV2 E题的更多相关文章
- codeforce 461DIV2 F题
题意 题目给出n,k,要求找出一个1到n的子集,(a,b)的对数等于k:(a,b)满足a<b且b%a==0: 分析 还记不记得求素数的时候的欧拉筛!对就那样!如果把每个数字看作一个点的话,可以通 ...
- codeforce 462DIV2 C题
题意 给出一个只含有1和2的序列,有n个元素,可以选择一段区间进行翻转操作,求再反转后的最大非递减子序列的长度 分析 太菜了只想出了N^2的做法.序列只有1和2,那么每个非递减子序列都会有一个分界点, ...
- codeforce 460DIV2 D题
感觉这个题不错,对拓扑排序有了更深的了解,用两种拓扑排序都写了些试试. dfs #include <cstdio> #include <algorithm> #include ...
- codeforce 459DIV2 C题
题意 一串括号字符串,里面存在一些‘?’,其中‘?’既可以当作 '(' 又可以当作 ')' ,计算有多少对(l,r),在s中[sl,s(l+1),s(l+2),.....sr],内的括号是匹配的.n= ...
- Two progressions CodeForce 125D 思维题
An arithmetic progression is such a non-empty sequence of numbers where the difference between any t ...
- codeforce 457DIV2 C题
题意 你需要构造一个n个点m条边的无向有权图,要求这个图的MST中边权的和与从1到n的最短路长度都为素数 分析 可以想到这样一种贪心,在i到i+1直接连一条边,这样最短路和MST都会是同样的一些边.只 ...
- codeforce 457DIV2 B题
题意: 题目给出两个整数n,k,(n<=10^18,k<=10^5),求一个含有k个整数的序列,要求以2为底,以序列内数字为幂的和为n,其中序列内最大的数最小,若有多个序列满足条件,输出 ...
- DSU on Tree浅谈
DSU on tree 在之前的一次比赛中,学长向我们讲了了这样一个神奇的思想:DSU on tree(树上启发式合并),看上去就非常厉害--但实际上是非常暴力的一种做法;不过暴力只是看上去暴力,它在 ...
- ACDream手速赛2
地址:http://acdream.info/onecontest/1014 都是来自Codeforce上简单题. A. Boy or Girl 简单字符串处理 B. Walking in ...
随机推荐
- 指针和引用在C++中应用
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- 【MFC】vs2013_MFC使用文件之15.mfc 按钮CBitmapButton的使用
本文是基于对话框的 博文基于 无幻 的博文为基础写的 http://blog.csdn.net/akof1314/article/details/4951836 笔者使用mfc撑死2个星期,不过这是有 ...
- 【转】斜率优化DP和四边形不等式优化DP整理
(自己的理解:首先考虑单调队列,不行时考虑斜率,再不行就考虑不等式什么的东西) 当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重 ...
- 剑指Offer面试题:7.斐波那契数列
一 题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二 效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...
- PS基础教程:[8]蒙版使用实例
蒙版是PS中我们最常使用的工具,使用蒙版合成图片可以制作出非常绚丽的效果,并且看上去感觉很真,下面就以一个实例为大家分享一下蒙版的基本使用. 方法 1.在PS中打开准备好的素材,这里主要介绍蒙版的使用 ...
- vs中删除nuget包
最近发现有些解决方案都是用来nuget包,这个偶尔能跑,但是有一个爱抽风的毛病,生成解决方案的时候报错:无法连接到远程服务器,真几把蛋疼.... 就是下图的情况 网上找了下不是很容易找到处理这个问题的 ...
- python笔记-4(装饰器、生成器、迭代器)
一.熟练掌握装饰器的原理 (在装饰器学习的过程中,查了看了很多资料,个人感觉走了很多的弯路,这个笔记,分享我的理解,希望能帮助到一些人.本文对装饰器的描述,侧重点是条理与逻辑思路,想通过从无到有的方式 ...
- 【知识笔记】前端样式CSS
一.页脚如何始终固定在页面底部显示 想要达到页脚固定在页面底部显示,也就是当页面主体高度在浏览器高度范围内时页脚靠浏览器底部,超出浏览器高度时页脚在页面主体下方,相当于在高度上的自适应. 乍看似乎很简 ...
- 解决Iframe session过期,登录界面无法全页刷新
在登录界面增加如下js代码: <script language=”JavaScript”> if (window != top) top.location.href = location. ...
- JAVA 工厂模式:简单工厂
简单工厂模式(SimpleFactory Pattern): 又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式.在简单工厂模式中,可以根据参数的不同返回不同类的 ...