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的矩阵就行了. 析:开始吧,并没有读对题意, ...
随机推荐
- vuex Payload 荷载
1.payload payload:有效载荷,即记录有效信息的部分. 通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如这一批数据量的大小 ...
- grep命令:查看配置文件未注释行(转)
FROM: https://linux.cn/article-6958-1.html 可以使用 UNIX/BSD/OS X/Linux 这些操作系统自身提供的 grep,sed,awk,perl或者其 ...
- RRDTool详解(转)
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处.作者信息和本声明.否则将追究法律责任.http://freeloda.blog.51cto.com/2033581/1307492 大纲 ...
- hadoop 出现FATAL conf.Configuration: error parsing conf file,异常
FATAL conf.Configuration: error parsing conf file: com.sun.org.apache.xerces.internal.impl.io.Malfor ...
- tps 与 事务平均响应时间关系对答(转)
问者:每秒处理的事务数和事务的平均响应时间 怎么个关系,有关系吗 kaku21:举个例子:一个高速路 有10个入口,每个入口每秒钟只能进1辆车,请问1秒钟最多能进几辆车?? 问者:10 kaku21: ...
- 【BZOJ1786】[Ahoi2008]Pair 配对 DP
[BZOJ1786][Ahoi2008]Pair 配对 Description Input Output Sample Input 5 4 4 2 -1 -1 3 Sample Output 4 题解 ...
- 在java项目中使用protobuf
1 通用方式 第一步,定义数据结构 第二步,使用protoc.exe生成java代码 第三步,序列化 第四步,反序列化 2 grpc方式 grpc官方推荐的方式,通过maven插件来生成java代码. ...
- 创建node.js一个简单的应用实例
在node.exe所在目录下,创建一个叫 server.js 的文件,并写入以下代码: //使用 require 指令来载入 http 模块 var http = require("http ...
- 题解 P3805 【【模板】manacher算法】
题解 P3805 [[模板]manacher算法] 我们先看两个字符串: ABCCBA ABCDCBA 显然这两字符串是回文的 然而两个串的对称中心的特性不同,第一个串,它的对称中心在两个C中间,然而 ...
- 我的Android进阶之旅------>真正在公司看几天代码的感触
仅以此文来回顾这一周我的工作情况,以及由此而触发的感想. ============================================================= 来到新公司5天了, ...