zoj 1013 Great Equipment DP
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=13
很经典的一个DP的题目
定义dp[i][num1][num2]表示前i个车装num1个装备1和num2个装备2之后最多能装的装备3的个数
那么dp[i][p+x][q+y]=max(dp[i][p+x][q+y],dp[i-1][p][q]+num(x,y));
其中num(x,y)表示第i辆车装x个装备1和y个装备2后还能最多装的装备3的个数
x,y的范围即为第辆车的可以装的装备1和装备2的最大个数
可以看出dp[i]只与dp[i-1]有关,要用滚动数组,否则会超内存
代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#define maxn 550
#define maxn_1 110
using namespace std;
int dp[][maxn][maxn];
int w[maxn_1];
int s[maxn_1];
int w1,s1,d1;
int w2,s2,d2;
int w3,s3,d3;
int c1,c2,c3,d4;
int prev,now;
int put(int num,int p,int q)
{
int nw=(w[num]-p*w1-q*w2)/w3;
int ns=(s[num]-p*s1-q*s2)/s3; return min(nw,ns);
}
int main()
{
int n;
int icase=;
while(scanf("%d",&n) != EOF&& n)
{
scanf("%d%d%d",&w1,&s1,&d1);
scanf("%d%d%d",&w2,&s2,&d2);
scanf("%d%d%d",&w3,&s3,&d3);
scanf("%d%d%d",&c1,&c2,&c3);
scanf("%d",&d4); for(int i=;i<=n;i++)
scanf("%d%d",&w[i],&s[i]);
memset(dp[],,sizeof(dp[])); int max_1=;
int max_2=;
prev=,now=;
for(int i=;i<=n;i++)
{
memset(dp[now],-,sizeof(dp[now]));
int num1=min(w[i]/w1,s[i]/s1);
int tmp;
for(int p=;p<=num1;p++)
{
int num2=min((w[i]-p*w1)/w2,(s[i]-p*s1)/s2);
if(p==) tmp=num2; for(int q=;q<=num2;q++)
{
int nn=put(i,p,q);
for(int k1=;k1<=max_1;k1++)
for(int k2=;k2<=max_2;k2++)
{
if(dp[prev][k1][k2]!=-)
dp[now][k1+p][k2+q]=max(dp[now][k1+p][k2+q],dp[prev][k1][k2]+nn);
}
}
} max_1+=num1;
max_2+=tmp;
swap(now,prev); }
int ans=;
for(int i=;i<=max_1;i++)
for(int j=;j<=max_2;j++)
{
if(dp[prev][i][j]!=-)
{
int num_4=min(min(i/c1,j/c2),dp[prev][i][j]/c3);
ans=max(max(ans,i*d1+j*d2+dp[prev][i][j]*d3),(i-num_4*c1)*d1+(j-num_4*c2)*d2+(dp[prev][i][j]-num_4*c3)*d3 +num_4*d4);
}
}
if(icase++) cout<<endl;
cout<<"Case "<<icase<<": "<<ans<<endl;
}
return ;
}
zoj 1013 Great Equipment DP的更多相关文章
- ZOJ 1013 Great Equipment(DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=13 题目大意:说的是有三种不同的装备,分别是头盔,盔甲,战靴需要运输, ...
- ZOJ Problem Set - 3822Domination(DP)
ZOJ Problem Set - 3822Domination(DP) problemCode=3822">题目链接 题目大意: 给你一个n * m的棋盘,每天都在棋盘上面放一颗棋子 ...
- zoj 3537 Cake 区间DP (好题)
题意:切一个凸边行,如果不是凸包直接输出.然后输出最小代价的切割费用,把凸包都切割成三角形. 先判断是否是凸包,然后用三角形优化. dp[i][j]=min(dp[i][j],dp[i][k]+dp[ ...
- ZOJ 3769-Diablo III(DP)
描述 Diablo III is an action role-playing video game. A few days ago, Reaper of Souls (ROS), the new e ...
- ZOJ 3623 Battle Ships DP
B - Battle Ships Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Subm ...
- zoj 2860 四边形优化dp
Breaking Strings Time Limit: 2 Seconds Memory Limit: 65536 KB A certain string-processing lan ...
- Problem Arrangement ZOJ - 3777(状压dp + 期望)
ZOJ - 3777 就是一个入门状压dp期望 dp[i][j] 当前状态为i,分数为j时的情况数然后看代码 有注释 #include <iostream> #include <cs ...
- ZOJ 3306 状压dp
转自:http://blog.csdn.net/a497406594/article/details/38442893 Kill the Monsters Time Limit: 7 Seconds ...
- [ACM] ZOJ 3725 Painting Storages (DP计数+组合)
Painting Storages Time Limit: 2 Seconds Memory Limit: 65536 KB There is a straight highway with ...
随机推荐
- 数据库DQL操作(重点)
*****DQL -- 数据查询语言 查询不会修改数据库表记录!一. 基本查询//emp表名1. 字段(列)控制1) 查询所有列 SELECT * FROM 表名; SELECT * FROM em ...
- angular替代Jquery,常用方法支持
1.angular.bind(self,fn.args); 切换作用域执行 2.angular.copy(source,[destination]); 拷贝和深度拷贝 3.angular.eq ...
- 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述 HierarchyViewer库的引入让M ...
- 老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge 4
这一部分的代码逻辑关系是这样的: 344行: 一个外部循环每次从上次保存下来的设备列表获得一个设备Device实例 350行: 再在一个内部循环从最新的设备列表中获得一个设备Device实例 353行 ...
- 老李推荐: 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例 4
第七步:保存新增加日记 代码3-2-7 增加日记-保存日记 #Step7: Save the note by touch on the "save" menu entry by c ...
- Java中log4j的使用
前言 距离上一篇文章又过去好长时间了,这段时间一直忙于工作,已经从net彻底转向Java了.工作也慢慢的步入正轨了,自己独自完成了一个小项目,不过工作中遇到了一些问题,还是得到了同学和同事的帮助.本来 ...
- 基于Spring Security 的JSaaS应用的权限管理
1. 概述 权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源.资源包括访问的页面,访问的数据等,这在传统的应用系统中比较常见.本文介绍的则是基于Saas系统 ...
- Linux Smaba服务器配置
Linux系统默认已经安装了Samba,但是没有安装Samba服务: 1,先查看安装情况:rpm -qa|grep samba 根据系统的安装情况选择下载或者通过光驱安装所缺的rpm包. 我的安装情况 ...
- php基础知识(二)---2017-04-14
1.字符串的三种表达形式: (1)双引号 (2)单引号 (3)尖括号 $s = <<<A <div style="width:500px; height:100px; ...
- SQL Server函数---Union与Union All的区别
SQL Server函数---Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称 ...