!HDU 1574 RP-dp-(重点在状态确定)
题意:有n件事。每件事若发生有两种情况。添加RP为a,可是收益会降低c;降低R为a,收益会添加c。
每件事可以发生的前提是小于等于或者大于等于门限值b。求最大收益。
分析:这题我没找到状态,所以就不会了。
又陷入了固定思维,用每件事来作为状态,然后发现找不到转移方程。
应该用RP值来作为状态,状态转移就是从满足门限的RP区间的状态转移到当前状态。
dp[k]表示RP值为k时的最大收益,方程:dp[i]=max(dp[i+a]。dp[i]+c)。
这个方程是在一个循环里求的,循环是用来遍历满足门限的RP区间。所以还要定义变量l。r来标示区间。
另外,这题另一个要做的处理,RP可能为负值,数组下标不能为负,又由于最大的RP总和是10000。所以RP总体向右移10000。
代码:
#include<iostream>
#define INF 10000007
using namespace std;
int t,n,a,b,c;
int dp[20005];//由于总体移动了10000,也就是零点移动到了10000。所以数组大小为20000
int max(int i,int j)
{
return i>j?i:j;
}
int main()
{
cin>>t;
while(t--){
cin>>n;
for(int i=0;i<20006;i++) dp[i]=-INF;
dp[10000]=0;
int l=10000,r=10000;
while(n--){
cin>>a>>b>>c;
b+=10000;
if(a<0){
for(int i=b;i<=r;i++)
dp[i+a]=max(dp[i+a],dp[i]+c);
l+=a;
}
else{
for(int i=b;i>=l;i--)
dp[i+a]=max(dp[i+a],dp[i]+c);
r+=a;
}
}
int ans=-INF;
for(int i=l;i<=r;i++) ans=max(ans,dp[i]);
cout<<ans<<endl;
}
}
!HDU 1574 RP-dp-(重点在状态确定)的更多相关文章
- hdu 1574 RP问题 01背包的变形
hdu 1574 RP问题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1574 分析:01背包的变形. RP可能为负,所以这里分两种情况处理一下就好 ...
- HDU 1574 RP问题 (dp)
题目链接 Problem Description 在人类社会中,任何个体都具有人品,人品有各种不同的形式,可以从一种形式转换为另一种形式,从一个个体传递给另一个个体,在转换和传递的过程中,人品不会消失 ...
- HDU 1574 RP问题
如果说难的话,难就难在对阶段的划分. 这又是一道对值域空间进行分段的题目. 因为rp有正有负,所以将整个数组向右平移10000个单位长度 l和r分别是rp可能的最小值 因为b是“门槛”,所以如果 发生 ...
- hdu 4057 AC自己主动机+状态压缩dp
http://acm.hdu.edu.cn/showproblem.php?pid=4057 Problem Description Dr. X is a biologist, who likes r ...
- hdu 4352 数位dp + 状态压缩
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 1565 方格取数(1) 状态压缩dp
方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化
HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
- HDU 4599 概率DP
先推出F(n)的公式: 设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态. 则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这 ...
随机推荐
- python 全栈开发,Day83(博客系统子评论,后台管理,富文本编辑器kindeditor,bs4模块)
一.子评论 必须点击回复,才是子评论!否则是根评论点击回复之后,定位到输入框,同时加入@评论者的用户名 定位输入框 focus focus:获取对象焦点触发事件 先做样式.点击回复之后,定位到输入框, ...
- 步步为营-73-asp.net的简单练习(根据美工提供静态页面,编写后台代码)
说明:实际企业中开发分工是很明确,往往程序员根据美工提供的UI界面进行后台代码的编写. 1.1 原始HTML页面 1.2 使用aspx进行修改 这里使用到了三层架构 using System; usi ...
- 《必须知道.NET》3.OO之美
3.2 依赖的哲学 3.2.1 本质诠释 "不要调用我们,我们会调用你" 3.2.2 什么是依赖,什么是抽象 "耦合是不可避免的" (1)什么是依赖和耦合 依赖 ...
- Linux学习笔记(Ubuntu操作系统)之hadoop学习之路
1:检查虚拟机的ip命令:ifconfig 2:普通用户切换root用户命令:su 3:root用户切换普通用户命令:su 用户名 4:普通用户执行系统执行前面加命令:sudo 5:查询主机名命令:h ...
- 【Java】 剑指offer(40) 最小的k个数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7 ...
- 用js来实现那些数据结构02(数组篇02-数组方法)
上一篇文章简单的介绍了一下js的类型,以及数组的增删方法.这一篇文章,我们一起来看看数组还有哪些用法,以及在实际工作中我们可以用这些方法来做些什么.由于其中有部分内容并不常用,所以我尽量缩小篇幅.在这 ...
- 使用windows脚本移动文件
1. 移动脚本 在部署web项目时,一般需要将打包的war包发布到Tomcat目录下,所以自己就在网上查找资料写了一个简略的移动文件的脚本,如下: @echo off echo "使用bat ...
- Maltego更新到4.1.6
Maltego更新到4.1.6 Maltego最近更新到4.1.6.由于Kali Linux软件源并没有提供此次更新包,用户需要进入Maltego进行手动更新.在起始页面中,双击状态栏右下角的黄色 ...
- Playmaker全面实践教程之Playmaker常用工具
Playmaker全面实践教程之Playmaker常用工具 Playmaker常用工具 Playmaker插件搭载了8个工具:FSM Browser.State Browser.Templates.T ...
- Python图形编程探索系列-01-初级任务
设计任务 设计一个主窗口,在其中添加三个标签和三个按钮,当点击按钮时,对标签的内容和色彩进行修改. 代码初步设计 import tkinter as tk root = tk.Tk() def f1( ...