RQNOJ 624 运动鞋:dp
题目链接:https://www.rqnoj.cn/problem/624
题意:
小明有奖学金啦!所以他要去买运动鞋。
总共有n款鞋,分别属于t个品牌。
每款鞋的价格为c[i],在小明心目中的价值为w[i]。
小明只有m元的奖学金。
小明同学有强迫症,每个品牌都要至少买一双,并且同一款不会买两双。
问你所买的鞋在小明心目中的价值之和最大为多少。
题解:
表示状态:
dp[i][j][k][p] = max value
i:考虑到第i个品牌
j:考虑到第i个品牌中的第j款鞋
k:当前花费
p:第i个品牌是否至少买了一双 (p == 0 / 1)
找出答案:
max dp[t][0][k][0] (0<=k<=m)
考虑到第t个品牌(不存在)的第一双鞋。
如何转移:
now: dp[i][j][k][p]
三种决策:
(1)买当前的鞋,接下来考虑当前品牌的下一款鞋 (买)
(2)不买当前的鞋,接下来考虑当前品牌的下一款鞋 (不买)
(3)买当前的鞋,接下来考虑下一个品牌的第一款鞋 (下个品牌)
对应方程:
dp[i][j+1][k+c[i][j]][1] = dp[i][j][k][p] + w[i][j]
dp[i][j+1][k][p] = dp[i][j][k][p]
dp[i+1][0][k][0] = dp[i][j][k][1]
边界条件:
dp[0][0][0][0] = 0
others = -1
AC Code:
// state expression:
// dp[i][j][k][p] = max value
// i: considering ith brand
// j: considering jth shoes
// k: present cost
// p: whether ith brand has been boungth (p == 0/1)
//
// find the answer:
// max dp[t][0][k][0]
//
// transferring:
// now: dp[i][j][k][p]
// dp[i][j+1][k+c[i][j]][1] = dp[i][j][k][p] + w[i][j]
// dp[i][j+1][k][p] = dp[i][j][k][p]
// dp[i+1][0][k][0] = dp[i][j][k][1]
//
// boundary:
// dp[0][0][0][0] = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 105
#define MAX_T 15
#define MAX_C 10005 using namespace std; int n,m,t;
int x,y,z;
int ans;
int dp[MAX_T][MAX_N][MAX_C][];
int cnt[MAX_T];
int c[MAX_T][MAX_N];
int w[MAX_T][MAX_N]; void read()
{
memset(cnt,,sizeof(cnt));
cin>>n>>m>>t;
for(int i=;i<n;i++)
{
cin>>x>>y>>z;
c[x][cnt[x]]=y;
w[x][cnt[x]]=z;
cnt[x]++;
}
} void solve()
{
ans=-;
memset(dp,-,sizeof(dp));
dp[][][][]=;
for(int i=;i<=t;i++)
{
for(int j=;j<=cnt[i];j++)
{
for(int k=;k<=m;k++)
{
for(int p=;p<;p++)
{
if(dp[i][j][k][p]!=-)
{
if(k+c[i][j]<=m && j+<=cnt[i])
{
dp[i][j+][k+c[i][j]][]=max(dp[i][j+][k+c[i][j]][],dp[i][j][k][p]+w[i][j]);
}
if(j+<=cnt[i])
{
dp[i][j+][k][p]=max(dp[i][j+][k][p],dp[i][j][k][p]);
}
dp[i+][][k][]=max(dp[i+][][k][],dp[i][j][k][]);
}
}
}
}
}
for(int j=;j<=m;j++)
{
ans=max(ans,dp[t+][][j][]);
}
} void print()
{
if(ans==-) cout<<"Impossible"<<endl;
else cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}
RQNOJ 624 运动鞋:dp的更多相关文章
- UVA 624 CD(DP + 01背包)
CD You have a long drive by car ahead. You have a tape recorder, but unfortunately your best music i ...
- RQNOJ 188 购物问题:树形dp
题目链接:https://www.rqnoj.cn/problem/188 题意: 商场以超低价格出售n个商品,购买第i个商品所节省的金额为w[i]. 为了防止亏本,有m对商品是不能同时买的.但保证商 ...
- RQNOJ 569 Milking Time:dp & 线段问题
题目链接:https://www.rqnoj.cn/problem/569 题意: 在一个数轴上可以摆M个线段,每个线段的起始终止端点给定(为整数),且每个线段有一个分值,问如何从中选取一些线段使得任 ...
- RQNOJ 514 字串距离:dp & 字符串
题目链接:https://www.rqnoj.cn/problem/514 题意: 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字 ...
- RQNOJ 328 炮兵阵地:状压dp
题目链接:https://www.rqnoj.cn/problem/328 题意: 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队. 一个N*M的地图由N行M列组成(N≤100,M≤10), ...
- RQNOJ 311 [NOIP2000]乘积最大:划分型dp
题目链接:https://www.rqnoj.cn/problem/311 题意: 给你一个长度为n的数字,用t个乘号分开,问你分开后乘积最大为多少.(6<=n<=40,1<=k&l ...
- RQNOJ 169 最小乘车费用:水dp
题目链接:https://www.rqnoj.cn/problem/169 题意: 给出行驶1-10公里的费用(所有车一样),可以倒车,问行驶n公里的最小费用. 题解: 大水题... (=´ω`=) ...
- RQNOJ 140 分配时间:dp
题目链接:https://www.rqnoj.cn/problem/140 题意: 小王参加的考试是几门科目的试卷放在一起考,一共给t分钟来做. 他现在已经知道第i门科目花k分钟可以拿到w[i][k] ...
- RQNOJ 622 最小重量机器设计问题:dp
题目链接:https://www.rqnoj.cn/problem/622 题意: 一个机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得. w[i][j]是从供应商j处购得的部件i的重量, ...
随机推荐
- rsync的几则tips(渗透技巧)
转自91ri 关于rsync rsync(remote synchronize)——Linux下实现远程同步功能的软件,能同步更新两处计算机的文件及目录.在同步文件时,可以保持源文件的权限.时间.软硬 ...
- win下配置java环境变量
系统变量→新建 JAVA_HOME 变量 . 变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME%\ ...
- SharePoint 2013 对话框
The quick way to open a sharepoint 2013 dialog modal form is via Javascript below 1 2 3 4 5 function ...
- java导出excel不须要额外jar包
眼下我知道的在java中导出Excel能够用poi或在jsp的文件头改变输出流. 以下再介绍一种就用java基础包导出的Excel.导出的格式形如: 源代码例如以下: package csvExcel ...
- mysql MHA报错 Can't exec "mysqlbinlog": No such file or directory at /usr/local/share/perl5/MHA/BinlogManager.pm line 99.
如果发现如下错误: Can't exec "mysqlbinlog": No such file or directory at /usr/local/share/perl5/MH ...
- thymeleaf模版的使用
thymeleaf,我个人认为是个比较好的模板,性能也比一般的,比如freemaker的要高,而且把将美工和程序员能够结合起来,美工能够在浏览器中查看静态效果,程序员可以在应用服务器查看带数据的效果. ...
- AWR元数据的迁移或导入到其它数据库
我们能够将AWR元数据迁移(导入)到其它数据库.低版本号的导入到高版本号,再用高版本号的数据库生成AWR报告,也能使用一些新特性,如 SQL ordered by Physical Reads (Un ...
- cacti 主机/网络设备流量监控 图解
1.在配置中找到设备 console —> Device 2.初次添加 cacti 监控主机的时候是没有任何设备的,所以要选择add 添加你要监控的主机 \
- 【Android】图片(文件)上传的请求分析结构
怎么在android中上传文件,即怎么用Java向服务器上传文件.上传图片,这是个老问题了,在网上能搜到现成的代码,很多朋友用起来也比较熟了,但是为什么这么写,可能很多朋友并不清楚,这篇文章就来分析一 ...
- PHP进阶知识
关于PHP程序员技术职业生涯规划:http://rango.swoole.com/ Micro Service Framework For PHP:https://github.com/pinguo/ ...