ACdreamoj1110(多重背包)

ACdreamoj1110(多重背包)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

意甲冠军:多个裸露的双肩背包。水的问题。


解决方法:然背包一样,仅仅只是加一个数组,记录着每一个物品用过的次数,多于存储量时就pass不更新。

          另一种方法是将每一个物品用二进制压缩处理。第一个代码比較简单;


代码:

/******************************************************
* author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <string.h>
//freopen ("in.txt" , "r" , stdin);
using namespace std;

#define eps 1e-8
#define zero(_) (abs(_)<=eps)
const double pi=acos(-1.0);
typedef long long LL;
const int Max=100010;
const int INF=1000000007;

int a[103];
int num[103];
int rem[Max];
bool ans[Max];
int n,cap;
int main()
{
    int t;
    //cout<<pow(6,4)-1<<endl;
    scanf("%d",&t);int kk=1;
    while(t--)
    {
        memset(ans,0,sizeof ans);
        scanf("%d%d",&n,&cap);
        for(int i=0; i<n; i++)
            scanf("%d",a+i);
        for(int i=0; i<n; i++)
            scanf("%d",num+i);
        ans[0]=1;
        for(int i=0; i<n; i++)
        {
            memset(rem,0,sizeof rem);
            for(int j=0; j<=cap; j++)
            {
                if(j+a[i]>cap||rem[j]>=num[i])
                    continue;
                if(ans[j])
                {
                    if(ans[j+a[i]])
                    {
                        rem[j+a[i]]=min(rem[j+a[i]],rem[j]+1);
                        continue;
                    }
                    ans[j+a[i]]=1;
                    rem[j+a[i]]=rem[j]+1;
                }
            }
        }
        int out=0;
        for(int i=1; i<=cap; i++)
            if(ans[i])
                out++;
        printf("Case %d: %d\n",kk++,out);
    }
    return 0;
}
/*
4 100000
1 12 456 5678
5 5 5 5
*/

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117094.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java8中 Collectors.groupingBy用法

    java8中 Collectors.groupingBy用法Collectors.groupingBy根据一个或多个属性对集合中的项目进行分组1、数据准备:publicProduct(Longid,Integernum,BigDecimalprice,Stringname,Stringcategory){this.id=id;this.num=num;this.price=price;this.name=name;this.category=category;}…

    2022年8月20日
    10
  • 软件管理和电脑管家打不开怎么办_电脑管家下载软件连接错误

    软件管理和电脑管家打不开怎么办_电脑管家下载软件连接错误错误:应用程序无法启动,因为应用程序的并行配置不正确。请参阅应用程序事件日志,或使用命令行sxstrace.exe工具”问题的处理方法。方法一:开始-运行(输入services.msc)-确定或回车,打开:服务(本地);我们在服务(本地)窗口找到:WindowsModulesInstaller服务,查看是否被禁用;3…如果WindowsModulesInstaller服务被禁用,我们必须把它更改为启用-手动,重启计算机,再安装应用程序。转载至https://blo

    2022年8月13日
    6
  • nginx日志格式配置

    nginx日志格式配置nginx作为我们IT中的首选反向代理神器,有时候我们有必要查看nginx中的日志的,但是我们对nginx的日志格式不是很了解怎么办呢?这样以来也是看不懂的。nginx日志nginx的日志分两种一种是access.log一种是error.log。access.log日志为访问日志,也就是相当于流水账记录所有的日志,而error不同只记录错误错误的请求。这两种日志对于我们来说都非常重要。同时这两…

    2022年6月9日
    87
  • Plc编程入门基础知识,在短时间内如何学会编程[通俗易懂]

    Plc编程入门基础知识,在短时间内如何学会编程[通俗易懂]Plc编程入门基础知识,在短时间内如何学会编程PLC:可编程逻辑控制器。实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同,基本组成如下图所示:工业生产和科技的发展都离不开plc的自动化控制,作为一名电工,想要不被时代所抛弃,就要不断充实自己、投资自己、学习PLC。那么电工学习PLC该如何入门呢?我是一个自动化行业职业计划者。给初学者略略总结一下,希望对你有所帮助。1选择学习的类型市场的主流plc有三菱,西门子,欧姆龙等等,我推荐先学习三菱,西门子基本上了解这两种,不愁没饭吃2从基

    2022年9月8日
    0
  • 【JSON解析】浅谈JSONObject的使用[通俗易懂]

    【JSON解析】浅谈JSONObject的使用[通俗易懂]简介在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。JSON建构于两种结构:“名称/值”对的集合(ACollectionofname/va…

    2022年7月26日
    4
  • C++\QT常见面试题[通俗易懂]

    C++\QT常见面试题[通俗易懂]1.C与C++的区别2.深拷贝和浅拷贝的区别3.指针和引用的区别4.什么是面向对象,面向对象的三大特征是什么?5.static关键字的用法6.const关键字的用法7.什么是函数重载8.创建的对象有几种方式,有什么区别9.什么是构造函数10.什么是this指针11.抽象类是什么12.什么是封装、继承、多态13.私有继承,保护继承和公有继承的区别14.友元函数15.new和delete16.C++STL容器有哪些17.什么是面向对象编程的开放封闭原则?18.内联函数与宏的区

    2022年6月25日
    89

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号