Luogu P1507 NASA的食物计划
来源:互联网 发布:富网络应用模式 程序 编辑:程序博客网 时间:2024/04/28 14:50
题目传送门:https://www.luogu.org/problem/show?pid=1507
主要思路:这道题是很简单的记搜,其实就是01背包的变种.
我们可以理解为被01背包多了一个限制.
当我们要求出当前状态所能得到的最多卡路里时,有两种决策:1.带走 2.不带走.
我们要求出选哪种决策的话卡路里高一点.
这么一来状态转移方程就可以出来了:
DP[step][sum_v][sum_t]=max(DP[step+1][sum_v+food[step].v],[sum_t+food[step].t]+food[step].cal,DP[step+1][sum_v][sum_t]);
PS:step是当前到那个物品了,sum_v是体积和,sum_t是质量和.
附上代码:
#include <iostream>#define MAXN 100#define MAXV 500#define MAXT 500#define UNINF -999999using namespace std;struct node{int v,t,cal;}food[MAXN];int dp[MAXN][MAXV][MAXT];int n,max_v,max_t;void init(){int i;cin>>max_v>>max_t>>n;for(i=1;i<=n;i++){cin>>food[i].v>>food[i].t>>food[i].cal;}return;}int search(int step,int sum_v,int sum_t){if(sum_v>max_v || sum_t>max_t){return UNINF;}if(step==n+1){return 0;}if(dp[step][sum_v][sum_t]!=0){return dp[step][sum_v][sum_t];}dp[step][sum_v][sum_t]=max(search(step+1,sum_v+food[step].v,sum_t+food[step].t)+food[step].cal,search(step+1,sum_v,sum_t));return dp[step][sum_v][sum_t];}void out(){cout<<dp[1][0][0];}int main(){init();search(1,0,0);out();return 0;}
阅读全文
2 0
- Luogu P1507 NASA的食物计划
- 【DP】洛谷 P1507 NASA的食物计划
- 洛谷 P1507 NASA的食物计划
- 洛谷P1507 NASA的食物计划
- vijos1334 NASA的食物计划
- Vijos1334 NASA的食物计划
- NASA的食物计划 vijos
- [01背包]vijos1334 NASA的食物计划
- [二维01背包]VIJOS P1334 NASA的食物计划
- vijos1334 NASA的食物计划(二维费用的背包问题)
- Vijos P1334 NASA的食物计划(动态规划,二维费用的01背包)
- Vijos1334_NASA的食物计划
- 马云谈“NASA”计划:投资让人更有创造力的技术
- SpaceX 获得 NASA 发射台 20 年使用权,钢铁侠的火星计划再进一步
- NASA
- [Vijos P1507][NOI 2004]郁闷的出纳员(Treap)
- [luogu-2680]noip2015day2-T3 运输计划 题解
- 响铃:马云启动“NASA”计划,这真会让阿里一飞冲天?
- socket C/C++编程(3)Windows&Linux之socket兼容性编程
- OSI七层模型与TCP/IP五层模型
- ffmpeg sws_scale函数详解
- Android widget之ListView
- 快排
- Luogu P1507 NASA的食物计划
- mfc CSpreadSheet与office一起用,CSpreadSheet在一个表格中生成两张表,调用office库文件操作表
- hive遇到的问题java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expec
- sql时间函数
- 封装一个Recyclerview(包含刷新,加载和状态切换)
- java基础数据类型与String类型区别
- 十分钟学会less
- charCode与keyCode的区别
- Java字符串写入文件三种方式