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的重量, ...
随机推荐
- 重读金典------高质量C编程指南(林锐)-------第三章 命名规则
3.1 共性规则 规则:标识符应该直观且可以拼读,可进行英语翻译. 规则:标识符的长度需要控制好,不应该太长. 规则:命名规则应该同操作系统或者开发工具等保持一致,比如大小写混用.AddChar ...
- PL/SQL Developer 和 instantclient客户端安装配置
PL/SQL Developer 和 instantclient客户端安装配置 oracle的安装我就不写了,不会安装的网上随便找一个教程就能装上,安装起来比較简单.可是,PL/SQL Develop ...
- 1M网速等于多少K
http://zhidao.baidu.com/question/157400316.html&__bd_tkn__=65ac453b343794385019e962bfb06bb8c710d ...
- 制作个人开发IDE
1.打开VS2013,新建项目: 2.点击下一步,下一步.到达例如以下界面: 3.下一步 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R ...
- NativeBase自定义组件样式
http://nativebase.io/docs/v0.5.13/customize#themingNativeBaseApp 对于NativeBase中的组件,我们可以根据实际需要来进行自定义组件 ...
- Can a GridView have a footer and header just like ListView?
Aquick question: In ListView I use this code: list.addHeaderView(headerView); How to deal with it wh ...
- c# 备份数据
#region 备份数据文件 /// <summary> /// 备份数据文件 /// </summary> /// <param name="strFileN ...
- SQLite集成与用法
本文转载至 http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/fra ...
- 【BZOJ2626】JZPFAR kd-tree+堆
[BZOJ2626]JZPFAR Description 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个( ...
- ElasticSearch架构思考(转)
一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下几个,以便帮助我们更好的了解,如何去设计ElasticSearch节点的数目: 打算处理多少数据 ...