RQNOJ 57 找啊找啊找GF:01背包
题目链接:https://www.rqnoj.cn/problem/57
题意:
sqybi在七夕这天太无聊了,所以他想去给自己找GF。
总共有n个MM。
搞定第i个MM要花费rmb[i]块大洋、rp[i]的人品、tim[i]的时间。
现在sqybi有m块大洋、r个人品。
问你在泡到MM的数量最多的情况下,所用的最短时间是多少。
题解:
表示状态:
dp[i][j][k][p] = min cost time
i:考虑到第i个MM
j:花费的rmb
k:花费的rp
p:已经搞定的MM数量
找出答案:
最多找到max_gf个GF。
ans = min dp[n][j][k][max_gf]
如何转移:
now: dp[i][j][k][p]
dp[i+1][j][k][p] = min dp[i][j][k][p] (不选)
dp[i+1][j+rmb[i]][k+rp[i]][p+1] = min dp[i][j][k][p] + tim[i] (选)
同时每次更新max_gf的值。
边界条件:
dp[0][0][0][0] = 0
AC Code:
// state expression:
// dp[i][j][k][p] = min cost time
// i: considering ith MM
// j: cost rmb
// k: cost rp
// p: get k GF
//
// find the answer:
// min dp[n][0 to m][0 to r][max p]
//
// transferring:
// now: dp[i][j][k][p]
// dp[i+1][j][k][p] = min dp[i][j][k][p]
// dp[i+1][j+rmb[i]][k+rp[i]][p+1] = min dp[i][j][k][p] + tim[i]
// max_gf = max p
//
// boundary:
// dp[0][0][0][0] = 0
// others = -1
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 105
#define MAX_M 105
#define MAX_R 105
#define INF 10000000 using namespace std; int n,m,r;
int ans;
int max_gf;
int rmb[MAX_N];
int rp[MAX_N];
int tim[MAX_N];
int dp[MAX_M][MAX_R][MAX_N]; void read()
{
cin>>n;
for(int i=;i<n;i++)
{
cin>>rmb[i]>>rp[i]>>tim[i];
}
cin>>m>>r;
} void solve()
{
max_gf=;
memset(dp,-,sizeof(dp));
dp[][][]=;
for(int i=;i<n;i++)
{
for(int j=m;j>=;j--)
{
for(int k=r;k>=;k--)
{
for(int p=max_gf;p>=;p--)
{
if(dp[j][k][p]!=-)
{
if(j+rmb[i]<=m && k+rp[i]<=r)
{
if(dp[j+rmb[i]][k+rp[i]][p+]==- || dp[j+rmb[i]][k+rp[i]][p+]>dp[j][k][p]+tim[i])
{
dp[j+rmb[i]][k+rp[i]][p+]=dp[j][k][p]+tim[i];
max_gf=max(max_gf,p+);
}
}
}
}
}
}
}
ans=INF;
for(int j=;j<=m;j++)
{
for(int k=;k<=r;k++)
{
if(dp[j][k][max_gf]!=-) ans=min(ans,dp[j][k][max_gf]);
}
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}
RQNOJ 57 找啊找啊找GF:01背包的更多相关文章
- Head First 设计模式 --8 模板方法模式 别找我,我会找你
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤.设计原则:1.封装变化2.多用组合少用集成3.针对接口变 ...
- springboot打包成jar包后找不到xml,找不到主类的解决方法
springboot打包成jar包后找不到xml,找不到主类的解决方法 请首先保证你的项目能正常运行(即不打包的时候运行无误),我们在打包时经常遇到如下问题: springboot打包成jar包后找不 ...
- RQNOJ 329 刘翔!加油!:01背包
题目链接:https://www.rqnoj.cn/problem/329 题意: 刘翔有n封信,每封信都有自己的欣赏价值value[i].消耗时间time[i].消耗体力h[i].和得到的鼓舞w[i ...
- RQNOJ 202 奥运火炬登珠峰:01背包
题目链接:https://www.rqnoj.cn/problem/202 题意: 登珠峰需要携带a(L)O2和t(L)N2. 有n个气缸可供选择.其中第i个气缸能装下a[i](L)O2和t[i](L ...
- sql server 子找父和父找子
父找子 with RTD1 as( select Id,pid from Sys_XCode ), RTD2 as( select * from RTD1 where id=1 union all s ...
- 常用的sql语句(找不同位数,找重复)
1.SQL找不同位数 select length(aae135),count(1) from ac01 group by length(aae135) ; ————————————————————— ...
- jquery parents() next() prev() 找父级别标签 找同级别标签
html结构 解决方法: jquery parents() 找父级别标签 next() 同级别向下找 prev() 同级别想上找 我这里找的是一个,下面有n个的方法 $(document).read ...
- 【IDEA】【maven】idea使用maven插件 打包提示找不到符号找不到类,但是却没有错误
[本篇方法如果无效,请使用终极解决方法] [终极解决方法]:https://www.cnblogs.com/sxdcgaq8080/p/10117852.html 如下,在右侧maven工具中进行打包 ...
- UVaLive 6950 && Gym 100299K Digraphs (DFS找环或者是找最长链)
题意:有n个只包含两个字母的字符串, 要求构造一个m*m的字母矩阵, 使得矩阵的每行每列都不包含所给的字符串, m要尽量大, 如果大于20的话构造20*20的矩阵就行了. 析:开始吧,并没有读对题意, ...
随机推荐
- jsp页面中,动态调用系统时间的实现
在做WEB项目时,经常会须要 在页面中显示当前时间,以下介绍一个简单的调用系统时间的方法,效果如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvczI5 ...
- C 命令行参数
C 命令行参数 执行程序时,可以从命令行传值给 C 程序.这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了. 命令行参数是使用 ...
- c# 访问Mysql
下载Connector/Net驱动程序,并安装. 通过MySQLConnection对象来连接数据库,连接MySQL的程序的最前面需要引用MySql.Data.MySqlClient. using M ...
- sql查字符串包含某字段查询
select * from dbo.V_AgreementMaterialQuery where '上海市' like '%'+SaleRange+'%' ‘上海市’>SaleRange(上海)
- 检验 java 基础数据类型参数传递方式
测试证明,java基础数据类型参数传递值虽是引用传递但是值不会改变.对象是引用传递,值会改变. 为什么?找到一段话来解释这个问题. "对于字符串对象来说,虽然在参数传递的时候也是引用传递,但 ...
- Leet Code OJ 237. Delete Node in a Linked List [Difficulty: Easy]
题目: Write a function to delete a node (except the tail) in a singly linked list, given only access t ...
- 栈(C++)
简介: 限定仅在表尾进行插入或删除操作的线性表 表尾端称为栈顶(top),表头端称为栈底(bottom) 特点: 在栈中,后入栈的元素先出栈 C语言版本 用于测试的文件,以及测试结果可以去作者GitH ...
- 基于togglepoolmember.pl编写F5设备控制模块
为了方便利用python对F5设备进行操作,本文将togglepoolmember.pl对F5设备的控制写成了python模块,源代码例如以下: #!/usr/bin/python # -*- cod ...
- Chrome自带恐龙小游戏的源码研究(二)
在上一篇<Chrome自带恐龙小游戏的源码研究(一)>中实现了地面的绘制和运动,这一篇主要研究云朵的绘制. 云朵的绘制通过Cloud构造函数完成.Cloud实现代码如下: Cloud.co ...
- 智能手机的耗电特征及APP耗电量测试的两种方法
文章陈述了手机发展趋势及耗电特性,集中讨论了时下最为关心的智能手机耗电问题,并介绍了测量手机软件耗电量的两种方法.此外还解释了为何运营商此前会提出收取微信的费用,心跳机制是什么. 美国著名手机公司Pa ...