题目链接:https://www.rqnoj.cn/problem/202

题意:

  登珠峰需要携带a(L)O2和t(L)N2。

  有n个气缸可供选择。其中第i个气缸能装下a[i](L)O2和t[i](L)N2,气缸重量为w[i]。

  问你在满足需求的前提下,最小的气缸总重量为多少。

题解:

  二重01背包。

  表示状态:

    dp[i][j][k]表示考虑到第i个气缸(还没选),已经能装下j(L)O2和k(L)N2。

    dp[i][j][k] = 此时的最小总重量

  找出答案:

    min dp[i][j][k] (j>=a && k>=t)

    (气缸编号为0~n-1)

  如何转移:

    由于此题与传统背包的区别为:氧气和氮气的容量需要大于等于所需体积。

    所以顺推。

    now: dp[i][j][k]

    dp[i+1][j][k] = max dp[i][j][k] (不选)

    dp[i+1][j+a[i]][k+t[i]] = max dp[i][j][k] + w[i]

  注:数据较水,可以不用考虑氧气拿的很少不够需求,而氮气大大超出需求的极端情况。

AC Code:

// state expression:
// dp[i][j][k] = min weight of cylinders
// i: considering ith cylinder
// j: O2
// k: N2
//
// find the answer:
// min dp[n][>O2][>N2]
//
// transferring:
// now: dp[i][j][k]
// dp[i+1][j][k] = min dp[i][j][k]
// dp[i+1][j+co2[i]][k+cn2[i]] = min dp[i][j][k] + w[i]
//
// bound:
// dp[0][0][0] = 0
// others = -1 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 2005
#define MAX_O2 50
#define MAX_N2 170
#define INF 10000000 using namespace std; int n;
int ans;
int o2,n2;
int co2[MAX_N];
int cn2[MAX_N];
int w[MAX_N];
int dp[MAX_N][MAX_O2][MAX_N2]; void read()
{
cin>>o2>>n2>>n;
for(int i=;i<n;i++)
{
cin>>co2[i]>>cn2[i]>>w[i];
}
} void solve()
{
ans=INF;
memset(dp,-,sizeof(dp));
dp[][][]=;
for(int i=;i<n;i++)
{
for(int j=;j<=o2;j++)
{
for(int k=;k<=n2;k++)
{
if(dp[i][j][k]!=-)
{
if(dp[i+][j][k]==- || dp[i+][j][k]>dp[i][j][k])
{
dp[i+][j][k]=dp[i][j][k];
}
if(dp[i+][j+co2[i]][k+cn2[i]]==- || dp[i+][j+co2[i]][k+cn2[i]]>dp[i][j][k]+w[i])
{
dp[i+][j+co2[i]][k+cn2[i]]=dp[i][j][k]+w[i];
if(j+co2[i]>=o2 && k+cn2[i]>=n2) ans=min(ans,dp[i+][j+co2[i]][k+cn2[i]]);
}
if(j>=o2 && k>=n2) ans=min(ans,dp[i][j][k]);
}
}
}
}
} void print()
{
cout<<ans<<endl;
} int main()
{
read();
solve();
print();
}

最新文章

  1. python day 1--python初始
  2. tar 解压出错
  3. WebSocket学习
  4. android-non-ui-to-ui-thread-communications-part-4-of-5
  5. (转)c语言_链表实例讲解(两个经典例子)
  6. HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good(转)
  7. Pyhon + Django 1.7.2 tutorial + virtualenv简单使用
  8. 关于iOS多线程,你看我就够了
  9. iOS开发技巧 -- 复用代码片段
  10. IDL 数组相关函数
  11. 四则运算题目生成(python版)
  12. 软件工程(FZU2015) 赛季得分榜,第八回合
  13. 雪碧图和如何实现浏览器中title的小图标
  14. springboot源码之(bean的递归注册)
  15. 【Redis】持久化
  16. bzoj 1295 最长距离 - 最短路
  17. 项目中更新pip 问题。更新后还是老版本
  18. AngularJS学习之 登录表单 清爽验证(边学边更新)
  19. Django之form组件is_valid校验机制
  20. 基于Udp的五子棋对战游戏

热门文章

  1. make -j 4 echo !$
  2. .NET实现爬虫
  3. nodejs读取配置文件
  4. Cocos2d-x 更改文字换行风格 ( cocos2dx change line )
  5. Battery Charging Specification 1.2 中文详解
  6. 邮箱大师WPZ协议包
  7. 在mac下搭建java开发环境
  8. WPF DataGrid 获取当前行某列值
  9. ios -- 延迟3秒触发performSelector
  10. Windows App开发之经常使用控件与应用栏