NASA的食物计划

NASA的食物计划

题目传送门

题目告诉我们要在体积和重量都不超过的情况下输出最大卡路里,稍微思考一下就可以发现这题是一道01背包的变形题(01背包不会的点这里)。

并且01背包需要空间优化。

那我们就照dp的角度去想

动态转移方程

dp[i][j]使ij

dp[i][j]=max(dp[i][j],dp[iz][jt]+kj)

zt,kj

蒟蒻不会英文

注意,由于是01背包所以质量和体积要从大到小循环

#include<bits/stdc++.h>
using namespace std;

struct node
{
    int kj,z,t;//从左到右依次为:食物的卡路里、质量、体积
}food[600];

int n,z,t;
int dp[5000][5000];//dp数组

int main()
{
    scanf("%d%d",&t,&z);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d%d",&food[i].t,&food[i].z,&food[i].kj);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=z;j>=food[i].z;j--)//循环质量
        {
            for(int k=t;k>=food[i].t;k--)//循环体积
            {
                dp[j][k]=max(dp[j][k],dp[j-food[i].z][k-food[i].t]+food[i].kj);//方程
            }
        }
    }
    printf("%d",dp[z][t]);
}
posted @   彬彬冰激凌  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示