zoj4019 Schrödinger's Knapsack(dp)
题意:有两种物品分别为n,m个,每种物品对应价值k1,k2。有一个容量为c的背包,每次将一个物品放入背包所获取的价值为k1/k2*放入物品后的剩余体积。求问所获取的最大价值。
整体来看,优先放入体积较小的物品所获取的价值会更大。但是有两种物品,k1,k2不同,所以还需要考虑放入两种物品的先后。那么,可以写成状态转移方程,dp[i][j]=max(dp[i-1][j]+k1*(c-suma[i]-sumb[j]),dp[i][j-1]+k2*(c-suma[i]-sumb[j])),方程代表在先放入第一种物品的第i个,或第二种物品的第j个中选取更优的情况。
PS.没有dp数组清零,导致wa。
#include<iostream>
#include<cstring>
#include<algorithm>
#define maxn 2005
using namespace std;
long long a[maxn],b[maxn],suma[maxn],sumb[maxn];
long long dp[maxn][maxn];
int k1,k2,c;
int n,m;
int main(){
int t;
cin >> t;
while (t--){
cin >> k1 >> k2 >> c;
cin >> n >> m;
for (int i=;i<=n;i++) cin >> a[i];
for (int i=;i<=m;i++) cin >> b[i];
a[]=;b[]=;suma[]=;sumb[]=;
sort(a+,a++n);
sort(b+,b++m);
for (int i=;i<=n;i++){
suma[i]=suma[i-]+a[i];
}
for (int i=;i<=m;i++){
sumb[i]=sumb[i-]+b[i];
} long long ans=;
for (int i=;i<=n;i++){
for (int j=;j<=m;j++){
dp[i][j]=;
}
}
for (int i=;i<=n;i++){
dp[i][]=dp[i-][]+k1*(c-suma[i]);
ans=max(ans,dp[i][]);
}
for (int j=;j<=m;j++){
dp[][j]=dp[][j-]+k2*(c-sumb[j]);
ans=max(ans,dp[][j]);
}
for (int i=;i<=n;i++){
for (int j=;j<=m;j++){
long long tmp=suma[i]+sumb[j];
if (tmp<=c)
dp[i][j]=max(dp[i-][j]+k1*(c-tmp),dp[i][j-]+k2*(c-tmp)); //先选取第一种物品中的第i个,或第二种物品中的第j个
ans=max(ans,dp[i][j]);
}
} cout << ans << endl;
}
return ;
}
zoj4019 Schrödinger's Knapsack(dp)的更多相关文章
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【CF618F】Double Knapsack(构造)
[CF618F]Double Knapsack(构造) 题面 洛谷 Codeforces 题解 很妙的一道题. 发现找两个数集很不爽,我们强制加强限制,我们来找两个区间,使得他们的区间和相等. 把区间 ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
随机推荐
- plupload.Uploader多文件上传
.前台 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CommonUpfi ...
- datagrid分页 从后端获取数据也很简单
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Datagrid.aspx. ...
- 2014.1.4 cxf spring webservice
先创建 webservice 服务端 . 首先下载 cxf jar 包 , cxf-2.7.8 . 新建 web 项目 aa . 将下载的cxf 压缩文件解压,将lib 下的jar 全部build p ...
- 如何配置JDK?
有很多人,java都下载好,却因不会配置JDK,而无法编程.今天巩固就来教大家配置JDK. 第一步:将下载好的java放在D盘(最好不要占用C盘). 第二步:右击我的电脑,选择"属性 ...
- 2018.10.14 loj#516. DP 一般看规律(启发式合并)
传送门 注意到一种颜色改了之后就不能改回去了. 因此可以启发式合并. 每次把小的合并给大的. 这样每个数最多被合并logloglog次. 如果维护一棵比较下标的平衡树的话,对于答案有贡献的就是每个数与 ...
- 2018.10.09 NOIP模拟 路途(递推+矩阵快速幂优化)
传送门 签到题.(考试的时候写挂爆0) 令AiA_iAi表示邻接矩阵的iii次幂. 于是就是求Al+Al+1+...+ArA_l+A_{l+1}+...+A_rAl+Al+1+...+Ar. ...
- 2018.08.20 loj#117. 有源汇有上下界最小流(模板)
传送门 这题真有意思... 先是有一个点T的我怀疑人生. 然后学大佬们封装了我的dinic就莫名其妙的过了??? 所以说锅给谁好呢? 给dinic吧... 解法就是先求出一段可行流,然后从t到s加一条 ...
- Struts has detected an unhandled exception
这个问题是struts和jsp页面的配置之间产生了问题,就是struts里边的名字和jsp里用的名字不是同一个名字,所以无法识别,所以检查一下里边的命名.
- Deployment is out of date due to changes in the underlying project contents. Deployment is out of date due to changes in the underlying project contents. You'll need to manually 'Redeploy' the projec
原因1:导入的jar包路径不对,造成第一个错误, 原因2:设置右键工程->属性->myeclipse->web->deployment选use workbenk defaul ...
- Chrome报错:跨域问题处理( Access-Control-Allow-Origin)_ 用于本地测试的快捷解决方法
报错提示如下: XMLHttpRequest cannot load http://www.xxxx.com/264/Data/GetScreenInfo. No 'Access-Control-Al ...