牛客网暑期ACM多校训练营(第三场)A (01背包还原路径)

链接地址: 点此自动传送

题意: 很简单弄清楚 就是 n 个物品 每个物品有 p,a,c,m 属性 价值为g 在 p < P ,a < A , c < C,m < M 的条件下,获取最大的价值, 简单01背包还原路径问题

比赛时忘了咋还原了….写过的题目….记录一下方便以后查看

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rd(a) scanf("%d",&a)
#define rlld(a) scanf("%lld",&a)
#define me(a,b) memset(a,b,sizeof(a))
const int inf= 0x3f3f3f3f;
const int maxn= 38;
const ll mod =1e9+7;
int dp[maxn][maxn][maxn][maxn];
bool fa[maxn][maxn][maxn][maxn][maxn];
struct node{
    int p,a,c,m,g;
}grp[maxn];
int main(){

    int n,p,a,c,m;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>grp[i].p>>grp[i].a>>grp[i].c>>grp[i].m>>grp[i].g;
    }

    cin>>p>>a>>c>>m;
    for(int i=0;i<n;i++){

        for(int pi=p;pi>=grp[i].p;pi--){

            for(int ai=a;ai>=grp[i].a;ai--){
                for(int ci=c;ci>=grp[i].c;ci--){
                    for(int mi=m;mi>=grp[i].m;mi--){
                        if(dp[pi][ai][ci][mi]<dp[pi-grp[i].p][ai-grp[i].a][ci-grp[i].c][mi-grp[i].m]+grp[i].g){
                            dp[pi][ai][ci][mi]=dp[pi-grp[i].p][ai-grp[i].a][ci-grp[i].c][mi-grp[i].m]+grp[i].g;
                            fa[i][pi][ai][ci][mi]=1;
                        }

                    }
                }

            }

        }



    }
    stack<int>qq;
    for(int i=n-1;i>=0;i--){
        if(p<0||a<0||c<0||m<0) break;
        if(fa[i][p][a][c][m]){
            p-=grp[i].p;
            a-=grp[i].a;
            c-=grp[i].c;
            m-=grp[i].m;
            qq.push(i);
        }

    }
    cout<<qq.size()<<endl;
    if(!qq.empty()) {
        cout<<qq.top();
        qq.pop();
    }
    while(!qq.empty()){
        cout<<" "<<qq.top();
        qq.pop();
    }



    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值