题目链接: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. Kali Linux 1.0 新手折腾笔记(2013.3.21更新)

    rootoorotor昨天折腾了 Kali Linux 1.0,把大概的配置过程记录下来,希望对想接触或使用Kali Linux的同学有所帮助. 请注意: 1.本文为面向新手的教程,没技术含量,没事瞎 ...

  2. php excel文件导出之二 图像导出

    PHP文件导出 之图像 和 文字同一时候导出 事实上之前写了个php文件导出.跟这个极为相似,由于项目须要对图像进行导出.查询一番.又写了一个, 这个能实现图像的导出(仅仅能是本地图像,不能使用远程图 ...

  3. cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法

    ----我的生活,我的点点滴滴!! 最后一个LabelBMFont了,字体图集LabelBMFont,LabelBMFont类是一个基于位图的字体图集.是一个包括全部你须要于坐标数据一起显示在屏幕上的 ...

  4. 并发错误:事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品

    这个是并发情况下导致的数据库事务错误,先介绍下背景. 背景 springboot+springmvc+sqlserver+mybatis 一个controller里有五六个接口,这些接口都用到了spr ...

  5. H5缓存机制学习记录

    参考文章:http://mp.weixin.qq.com/s?__biz=MTEwNTM0ODI0MQ==&mid=404724239&idx=1&sn=e0a2887f9ff ...

  6. 怎样替换jar包的指定文件

    在做(或修改别人的)项目的时候,可能遇到要修改调用的的jar包内的类属性或方法的问题.在eclipse或是其他的IDE中是无法直接修改的,所以需要一个解压jar-->修改文件-->编译-- ...

  7. Tomcat 7.0 servlet @WebServlet

    在使用tomcat7.0+eclipse j2ee时,新建Dynamic Web Project时, 会让选择是否生成web.xml.无论选择与否,此时新建一个servlet, 可以不在web.xml ...

  8. SpringBoot 定时任务升级篇(动态修改cron参数)

    需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态修改cron参数呢?那么我们一起看看具体怎么实现,先看下本节大纲: ()简单方式:修改 ...

  9. MySQL -- Ubuntu下的操作命令

    =======================安装======================参照MySQL官网的步骤:https://dev.mysql.com/doc/mysql-apt-repo ...

  10. Javascript文件加载:LABjs和RequireJS

    传统上,加载Javascript文件都是使用<script>标签. 就像下面这样: <script type="text/javascript" src=&quo ...