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

  1. Head First 设计模式 --8 模板方法模式 别找我,我会找你

    模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤.设计原则:1.封装变化2.多用组合少用集成3.针对接口变 ...

  2. springboot打包成jar包后找不到xml,找不到主类的解决方法

    springboot打包成jar包后找不到xml,找不到主类的解决方法 请首先保证你的项目能正常运行(即不打包的时候运行无误),我们在打包时经常遇到如下问题: springboot打包成jar包后找不 ...

  3. RQNOJ 329 刘翔!加油!:01背包

    题目链接:https://www.rqnoj.cn/problem/329 题意: 刘翔有n封信,每封信都有自己的欣赏价值value[i].消耗时间time[i].消耗体力h[i].和得到的鼓舞w[i ...

  4. RQNOJ 202 奥运火炬登珠峰:01背包

    题目链接:https://www.rqnoj.cn/problem/202 题意: 登珠峰需要携带a(L)O2和t(L)N2. 有n个气缸可供选择.其中第i个气缸能装下a[i](L)O2和t[i](L ...

  5. sql server 子找父和父找子

    父找子 with RTD1 as( select Id,pid from Sys_XCode ), RTD2 as( select * from RTD1 where id=1 union all s ...

  6. 常用的sql语句(找不同位数,找重复)

    1.SQL找不同位数 select length(aae135),count(1) from ac01 group by  length(aae135) ; ————————————————————— ...

  7. jquery parents() next() prev() 找父级别标签 找同级别标签

    html结构 解决方法: jquery parents()  找父级别标签 next() 同级别向下找 prev() 同级别想上找 我这里找的是一个,下面有n个的方法 $(document).read ...

  8. 【IDEA】【maven】idea使用maven插件 打包提示找不到符号找不到类,但是却没有错误

    [本篇方法如果无效,请使用终极解决方法] [终极解决方法]:https://www.cnblogs.com/sxdcgaq8080/p/10117852.html 如下,在右侧maven工具中进行打包 ...

  9. UVaLive 6950 && Gym 100299K Digraphs (DFS找环或者是找最长链)

    题意:有n个只包含两个字母的字符串, 要求构造一个m*m的字母矩阵, 使得矩阵的每行每列都不包含所给的字符串, m要尽量大, 如果大于20的话构造20*20的矩阵就行了. 析:开始吧,并没有读对题意, ...

随机推荐

  1. vuex Payload 荷载

    1.payload payload:有效载荷,即记录有效信息的部分. 通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如这一批数据量的大小 ...

  2. grep命令:查看配置文件未注释行(转)

    FROM: https://linux.cn/article-6958-1.html 可以使用 UNIX/BSD/OS X/Linux 这些操作系统自身提供的 grep,sed,awk,perl或者其 ...

  3. RRDTool详解(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处.作者信息和本声明.否则将追究法律责任.http://freeloda.blog.51cto.com/2033581/1307492 大纲 ...

  4. hadoop 出现FATAL conf.Configuration: error parsing conf file,异常

    FATAL conf.Configuration: error parsing conf file: com.sun.org.apache.xerces.internal.impl.io.Malfor ...

  5. tps 与 事务平均响应时间关系对答(转)

    问者:每秒处理的事务数和事务的平均响应时间 怎么个关系,有关系吗 kaku21:举个例子:一个高速路 有10个入口,每个入口每秒钟只能进1辆车,请问1秒钟最多能进几辆车?? 问者:10 kaku21: ...

  6. 【BZOJ1786】[Ahoi2008]Pair 配对 DP

    [BZOJ1786][Ahoi2008]Pair 配对 Description Input Output Sample Input 5 4 4 2 -1 -1 3 Sample Output 4 题解 ...

  7. 在java项目中使用protobuf

    1 通用方式 第一步,定义数据结构 第二步,使用protoc.exe生成java代码 第三步,序列化 第四步,反序列化 2 grpc方式 grpc官方推荐的方式,通过maven插件来生成java代码. ...

  8. 创建node.js一个简单的应用实例

    在node.exe所在目录下,创建一个叫 server.js 的文件,并写入以下代码: //使用 require 指令来载入 http 模块 var http = require("http ...

  9. 题解 P3805 【【模板】manacher算法】

    题解 P3805 [[模板]manacher算法] 我们先看两个字符串: ABCCBA ABCDCBA 显然这两字符串是回文的 然而两个串的对称中心的特性不同,第一个串,它的对称中心在两个C中间,然而 ...

  10. 我的Android进阶之旅------>真正在公司看几天代码的感触

    仅以此文来回顾这一周我的工作情况,以及由此而触发的感想. ============================================================= 来到新公司5天了, ...