0-1 背包 改良版

#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 200;
template <class Type>
void Traceback(int n,Type w[],Type v[],Type p[maxn][maxn],int *head,int x[]);
template <class Type>
Type Knapsack(int n,Type c,Type v[],Type w[],Type p[maxn][maxn],int x[])
{
    int *head = new int[n+2];
    head[n+1] = 0,p[0][0] = 0,p[0][1] = 0;
    int left = 0,right = 0,next = 1;
    head[n] = 1;
    for(int i=n; i>=1; i--)
    {
        int k = left ;
        for(int j = left ; j<=right; j++)
        {
            if(p[j][0] + w[i]>c) break;
            Type y= p[j][0]+w[i],m = p[j][1] + v[i];
            while(k<=right&&p[k][0]<y)
            {
                p[next][0] = p[k][0];
                p[next++][1] = p[k++][1];
            }
            if(k<=right&&p[k][0]==y)
            {
                if(m<p[k][1]) m = p[k][1];
                k++;
            }
            if(m>p[next-1][1])
            {
                p[next][0]=y;
                p[next++][1] = m;
            }
            while(k<=right&&p[k][1]<=p[next-1][1]) k++;
        }
        while(k<=right)
        {
            p[next][0] = p[k][0];
            p[next++][1] =p[k++][1];
        }
        left = right+1,right = next-1,head[i-1] =next;
    }
    Traceback<Type>(n,w,v,p,head,x);
    return p[next-1][1];
}
template <class Type>
void Traceback(int n,Type w[],Type v[],Type p[maxn][maxn],int head[],int x[])
{
    Type j = p[head[0]-1][0],m= p[head[0]-1][1];
    for(int i=1; i<=n; i++)
    {
        x[i] = 0;
        for(int k = head[i+1]; k<=head[i]-1; k++)
        {
            if(p[k][0]+w[i]==j&&p[k][1]+v[i]==m)
            {
                x[i] = 1;
                j = p[k][0];
                m = p[k][1];
                break;
            }
        }
    }
}
int n,c,w[maxn],v[maxn],p[maxn][maxn],x[maxn];
int main()
{
    scanf("%d%d",&n,&c);
    for(int i=1; i<=n; i++)
        scanf("%d",w+i);
    for(int i=1; i<=n; i++)
        scanf("%d",v+i);
    printf("%d\n",Knapsack<int>(n,c,v,w,p,x));
}
/*
5 10
2 2 6 5 4
6 3 5 4 6
*/

课本75页,课本语法错误已修正。

时间: 2024-10-16 03:06:29

0-1 背包 改良版的相关文章

office全系列激活脚本-改良版

@ECHO OFFTITLE office 全版本系统激活@echo offfor /l %%a in (8,1,16) do (for /f "tokens=*" %%i in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Office\%%a.0\Word\Options" /v "PROGRAMDIR"') do (if not "%%i"==""

Uva 11468 改良版AC自动机

改良版AC自动机 UVa 11468 题意:给一些字符和各自出现的概率,在其中随机选择L次,形成长度为L的字符串S,给定K个模板串,求S不包含任意一个串的概率. 首先介绍改良版的AC自动机: 传统的AC自动机,是当一个字符失配时,根据失配函数转移到指定地方,而这个失配函数,是通过一个宽搜的过程形成的,这时在匹配串的时候,就当匹配失败时,顺着失配指针走,直到可以匹配.然后匹配到单词结点,或者后缀链接是一个单词结点,这些前面的结点也是匹配单词.这就是传统的AC自动机. 现在将这个AC自动机改版优化:

Ehcache web cahce 缓存改良版

java 代码: package net.sf.ehcache.constructs.web.filter; import java.util.Enumeration; import javax.servlet.FilterChain;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUti

poj1417 带权并查集+0/1背包

题意:有一个岛上住着一些神和魔,并且已知神和魔的数量,现在已知神总是说真话,魔总是说假话,有 n 个询问,问某个神或魔(身份未知),问题是问某个是神还是魔,根据他们的回答,问是否能够确定哪些是神哪些是魔. 对于这些问题,我们只需要发现,如果回答对方是魔,那么即可以判断出这两个不是同一种族,而如果回答对方是神,那么说明这两个是同一种族,那么就可以用带权并查集合并这些神和魔,然后记录两种分别多少个,这样当所有询问都处理完时我们就可以得到一系列的集合,每个集合分别有它的两个种族的人数,但是此时对于每个

FlashFXP 5.0.0官方中文破解版,附文件下载地址和破解码

FlashFXP 5.0.0官方中文破解版是一个功能强大的 FXP/FTP 软件,融合了一些其他优秀 FTP 软件的优点,如像 CuteFTP 一样可以比较文件夹,支持彩色文字显示:像 BpFTP 支持多文件夹选择文件,能够缓存文件夹:像 LeapFTP 一样的外观界面,甚至设计思路也差相仿佛.支持文件夹(带子文件夹)的文件传送.删除:支持上传.下载及第三方文件续传:可以跳过指定的文件类型,只传送需要的文件:可以自定义不同文件类型的显示颜色:可以缓存远端文件夹列表,支持FTP代理及 Socks

spring4.0.6最新稳定版新特性学习,简单学习教程(一)

Spring Framework 4.0 学习整理. Spring框架的核心部分就是Ioc容器,而Ioc控制的就是各种Bean,一个Spring项目的水平往往从其XML配置文件内容就能略知一二,很多项目,往往是外包公司的项目,配置文件往往是乱七八糟,抱着能跑就行,不报错就行的态度去写,然后在项目中后期发现各种缺失又去一通乱补,其结果就是,整个文档可读性极差,毫无章法.这也不能怪写这个XML的人,拿着苦逼程序员的工资干着架构师的工作必然是这个结果.为了程序员的幸福,我认为有必要来一套简单快速的官方

Surfer8.0 汉化注册版 1CD(地质工作者必备的专业成图软件)中文版

ABZ.Design.Flow.Solutions.DesigNet.v4.16 1CD Aspen Economic Evaluation Family v7.3.2-ISO 1DVD Avenza Geographic Imager 4.0 for Phtotoshop CS6 1CD Avenza Mapublisher v9.0 for Phtotoshop CS6 Win64 1CD Bentley Map Enterprise SS3 V8i 08.11.09.91 1CD Data

windows全系列激活脚本-改良版

@ECHO OFFTITLE Windows 全版本系统激活cscript //nologo %Systemroot%\system32\slmgr.vbs -skms 10.1.1.12ECHO 检测激活...cscript //nologo %Systemroot%\system32\slmgr.vbs -atocscript //nologo %Systemroot%\system32\slmgr.vbs -dlvPAUSE 新建文本文档将上面的代码复制过去保存为windows全系列激活脚

Java 开源博客——B3log Solo 0.6.7 正式版发布了!

Java 开源博客 -- B3log Solo 0.6.7 正式版发布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也非常欢迎大家参与进来 :-) 特性 基于标签的文章分类 Ping Google Blog Search Engine 博客/标签 Atom/RSS 输出 Sitemap 输出 评论回复及邮件提醒 自定义页面 置顶/相关/随机/站外相关文章 文章.页面永久链接(Permalink) 文章草稿夹.签名档.更新提示 缓存管理 多用户 多语言 换肤 插件 Met