题目链接: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. hibernate 数据缓存

    http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html,

  2. wait和notify实现的生产者消费者线程交互

    public class ProductTest { public static void main(String args[]) { Repertory repertory=new Repertor ...

  3. redis实现訪问频次限制的几种方式

    结合上一篇文章<redis在学生抢房应用中的实践小结>中提及的用redis实现DDOS设计时遇到的expire的坑.事实上,redis官网中对incr命令的介绍中已经有关于怎样用redis ...

  4. OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法

    <span style="font-size:24px;">//////第一种方法 // NSMutableArray *arr = [NSMutableArray a ...

  5. gitbook 的资源同步到 github中(方便维护和备份)

    进入SETTINGS -> Github -> Select a Repository. 到这一步为止,我们可以先去我们的github,创建一个仓库先,推荐同名.然后回来gitbook中, ...

  6. Struts2学习一----------Struts2的工作原理及HelloWorld简单实现

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2工作原理 一个请求在Struts2框架中的处理步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2.这个请求 ...

  7. 【WPF学习笔记】之如何设置下拉框读取SqlServer数据库的值:动画系列之(一)

    先前条件:设置好数据库,需要三个文件CommandInfo.cs.DbHelperSQL.cs.myHelper.cs,需要修改命名空间,参照之前随笔http://www.cnblogs.com/Ow ...

  8. Double类parseDouble()和valueOf()方法的区别

    数字类型的String字符串转换为浮点数通常采用parseDouble()和valueOf()方法, 两者主要是存在以下两点区别. 区别一:参数区别Double.parseDouble(java.la ...

  9. PowerBuilder -- 调试(Debug)

    @.进入代码调试,执行下一步直接就退出了调试 原文:http://bbs.csdn.net/topics/390126005 处理方法:尝试把 Watch 中查看的变量全部删掉.

  10. 用户对变量或寄存器进行位操作 、“|=”和“&=~”操作

    给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3.在以上两个操作中,要保持其他位不变. 答案: ----------------------------------- ...