题目链接: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的更多相关文章

  1. ZOJ 1013 Great Equipment(DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=13 题目大意:说的是有三种不同的装备,分别是头盔,盔甲,战靴需要运输, ...

  2. ZOJ Problem Set - 3822Domination(DP)

    ZOJ Problem Set - 3822Domination(DP) problemCode=3822">题目链接 题目大意: 给你一个n * m的棋盘,每天都在棋盘上面放一颗棋子 ...

  3. zoj 3537 Cake 区间DP (好题)

    题意:切一个凸边行,如果不是凸包直接输出.然后输出最小代价的切割费用,把凸包都切割成三角形. 先判断是否是凸包,然后用三角形优化. dp[i][j]=min(dp[i][j],dp[i][k]+dp[ ...

  4. 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 ...

  5. ZOJ 3623 Battle Ships DP

    B - Battle Ships Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Subm ...

  6. zoj 2860 四边形优化dp

    Breaking Strings Time Limit: 2 Seconds        Memory Limit: 65536 KB A certain string-processing lan ...

  7. Problem Arrangement ZOJ - 3777(状压dp + 期望)

    ZOJ - 3777 就是一个入门状压dp期望 dp[i][j] 当前状态为i,分数为j时的情况数然后看代码 有注释 #include <iostream> #include <cs ...

  8. ZOJ 3306 状压dp

    转自:http://blog.csdn.net/a497406594/article/details/38442893 Kill the Monsters Time Limit: 7 Seconds ...

  9. [ACM] ZOJ 3725 Painting Storages (DP计数+组合)

    Painting Storages Time Limit: 2 Seconds      Memory Limit: 65536 KB There is a straight highway with ...

随机推荐

  1. 解决mysql启动时报The server quit without updating PID file 的错误(转)

    1.一般是权限问题,把用户和组改为mysql就可以了. chown -R mysql:mysql  /var/lib/mysql 2.在启动mysql时报下列错误 [root@mysqld2 ~]#  ...

  2. Android -- 贝塞尔曲线公式的推导

    1,最近看了几个不错的自定义view,发现里面都会涉及到贝塞尔曲线知识,深刻的了解到贝塞尔曲线是进阶自定义view的一座大山,so,今天先和大家来了解了解. 2,贝塞尔曲线作用十分广泛,简单举几个的栗 ...

  3. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(三)

    一步步打造一个简单的 MVC 电商网站 - BooksStore(三) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...

  4. C#调用webbrowser,阻止弹出新IE窗口

    本人是用WPF内嵌 winform的webbrowser这种形式开发, 弹出的 //屏蔽弹出新IE窗口 private void webBrowser_NewWindow(object sender, ...

  5. 持续集成:TestNG组织如何测试用例

    持续集成:TestNG组织如何测试用例   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:90 ...

  6. Angularjs 实现移动端在线测评效果

    注:此文所用的angular版本为 1.6 一.运行效果图 二.需求 1. 点击选项时,背景变为黄色(即选中状态),并且自动切换到下一题 2. 切换到下一题时,顶部进度随之改变 3. 选中时要把对应的 ...

  7. 天气渐热,来片雪花降降温——Android自定义SurfaceView实现雪花效果

    实现雪花的效果其实也可以通过自定义View的方式来实现的(SurfaceView也是继承自View的),而且操作上也相对简单一些,当然也有一些不足啦... 相对于View,SurfaceView有如下 ...

  8. JavaScript基础学习(六)—函数

    一.函数的定义 1.function语句形式 //1.function语句式 function test1(){ alert("I am test1"); } test1(); 2 ...

  9. ML(4): NavieBayes在R中的应用

    朴素贝叶斯方法是一种使用先验概率去计算后验概率的方法, 具体见上一节. 算法包:e1071 函数:navieBayes(formule,data,laplace=0,...,subset,na.act ...

  10. 使用Dubbox构架分布式服务

    第一部分:Dubbo的背景分析及工作原理 1. Dubbo是什么?Dubbo是一个来自阿里巴巴的开源分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 简单的说 ...