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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python数组拼接字符串_Python练习题——数组拼接

    python数组拼接字符串_Python练习题——数组拼接##输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。##示例1:#输入:[10,2]#输出:”102″##示例2:#输入:[3,30,34,5,9]#输出:”3033459″##1#classSolution:#defminNumber(self,nums):#nums_str=[str(i)…

    2022年6月2日
    107
  • 【教程】Tomcat 的catalina.out 日志按照自定义日期格式进行切割

    本文简单介绍在使用cronolog对tomcat的日志进行自定义日期格式的切割,方便日志的整理和遇到问题日志的排查!安装cronolog安装cronolog的方法网上有很多,这里也简单的介绍一下。1.下载安装包 cronolog-1.6.2.tar.gz2.安装cronolog tar -zxvf cronolog-1.6.2.tar.gz …

    2022年2月26日
    42
  • linux安装pycharm后找不到了_pycharmlinux安装

    linux安装pycharm后找不到了_pycharmlinux安装在linux中安装pycharm很简单,解压后直接启动.1.先去官网下载安装包2.解压压缩包到自己指定的目录.第三方软件一般安装到/opt目录3.启动,可以直接运行的.进入到pycharm解压后的目录的bin目录下.pycharm.sh就是启动脚本,直接可以启动,但这样每次都要指定路径启动.shpycharm.sh启动pycharm将会阻塞一个终端,关闭终端pycharm也将随之关闭.4.创建一下快捷启动命令,指定一个别名.1.进入当前用户主目录.bashrc

    2022年10月18日
    3
  • 图形界面JAVA_aardio plus

    图形界面JAVA_aardio plus前阵子在用python写一些小程序,写完后就开始思考怎么给python程序配一个图形界面,毕竟控制台实在太丑陋了。于是百度了下python的图形界面库,眼花缭乱的一整页,拣了几件有“特色”有“噱头”的下载下来做了个demo,仍旧不是很满意,不是下载安装繁琐,就是界面丑陋或者难写难用,文档不齐全。后来那天,整理电脑文件发现了6年前下载的aatuo(现已更名aardio),顿时一阵惊喜。先说说aard…

    2025年8月12日
    3
  • js 符号转换 html代码

    js 符号转换 html代码S转换HTML转义符//去掉html标签//普通字符转换成转意符//转意符换成普通字符//转成空格//回车转为br标签//去除开头结尾换行,并将连续3次以上换行转换成2次换行//将多

    2022年7月1日
    26
  • Django 模型_django反向生成model

    Django 模型_django反向生成model前言随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了:1.SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多相近的SQL语句。2.

    2022年7月30日
    7

发表回复

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

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