AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 其它
    • 题解
    • 分享
    • 商店
    • 问答
  • 吐槽
  • 登录/注册

AcWing 1022. 宠物小精灵之收服    原题链接    简单

作者: 作者的头像   Will_15 ,  2023-01-25 21:26:04 ,  所有人可见 ,  阅读 14


0


//main:输入V1,V2,n,输入商品,从大到小遍历二维容积,记得V2不能为0,最大值,从大到小遍历得到最小消耗,输出减去的值
//有两个容量怎么办:和一个容量一样处理
//转换为01背包问题最关键的是  如果设置体积和价值,以及结果是什么属性
#include<iostream>
using namespace std;
const int N=1010,M=510;
int V1,V2,n;
int f[N][M];
int main()
{
    cin>>V1>>V2>>n;
    for(int i=1;i<=n;i++)
    {
        int v1,v2;
        cin>>v1>>v2;
        for(int j=V1;j>=v1;j--)//二维体积和一维体积的处理方式一样,因为都是把所有情况的体积遍历一遍
            for(int k=V2-1;k>=v2;k--)
                f[j][k]=max(f[j][k],f[j-v1][k-v2]+1);//记得知道价值,且加上价值
    }
    cout<<f[V1][V2-1]<<" ";//这里第二重体积不能为0
    int k=V2-1;
    while(k>0&&f[V1][k-1]==f[V1][V2-1])k--;//这个说明相同的属性都是连在一起的,从大到小最后一个就是最小的
    cout<<V2-k<<endl;
    /*for(int i=0;i<=V2-1;i++)//从小到大开始遍历找到和最大值一样的且体积消耗最小的
    {//因为这里是把所有情况体积的值都计算保存了
    //最后一层是在所有商品中选,所有容积下的最大值都得到保存了
        if(f[V1][i]==f[V1][V2-1])
        {
            cout<<V2-i<<endl;
            return 0;
        }
    }*/
    return 0;
}

0 评论

你确定删除吗?
1024
x

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息