HDU 4778 内存搜索&如压力

HDU 4778 内存搜索&如压力

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

鉴于G宝石,B包。和S。S当代表凑齐每种颜色的宝石S我们可以成为哲学家的石头

每个软件包包含N宝石。分别c1,c2…….

然后他们轮流拿包。每个包可以得到一次。宝石出包放在地上。

假设你可以成为魔法石拿着魔法石,次还这个人拿包。没变成则换人。
魔法石的个数就是获得分数,问两人最优的时候分差是多少。

状压记忆化搜索

一共21个包。状压存当前取包的状态

不管如何取,最后获得的魔法石数量一定

dp[i]表示在i状态下。先手能够获得的最高分数

#include "stdio.h"
#include "string.h"

int aim,g,b,s;
int dp[1<<22],c[25][10];
int bit[25];
int inf=0x3f3f3f3f;

int Max(int a,int b)
{
    if (a<b)return b;
    else return a;
}
int dfs(int cur,int sum,int temp[])
{
    int ans,i,next,j,w,cnt;
    int mark[10];
    if (cur==aim || sum==0) return 0;
    if (dp[cur]!=inf) return dp[cur];

    ans=0;
    for (i=1;i<=b;i++)
        if (cur&bit[i])
        {
            next=cur^bit[i];
            cnt=0;
            for (j=1;j<=g;j++)
            {
                mark[j]=temp[j]+c[i][j];
                cnt+=mark[j]/s;
                mark[j]%=s;
            }
            if (cnt>0) w=cnt+dfs(next,sum-cnt,mark);
            else w=sum-dfs(next,sum,mark);
            ans=Max(ans,w);
        }
    return dp[cur]=ans;
}
int main()
{
    int i,n,x,sum,aim,ans;
    int all[10],mark[25];
    bit[1]=1;
    for (i=2;i<=22;i++)
        bit[i]=bit[i-1]*2;

    while (scanf("%d%d%d",&g,&b,&s)!=EOF)
    {
        if (g+b+s==0) break;
        memset(c,0,sizeof(c));
        memset(all,0,sizeof(all));
        for (i=1;i<=b;i++)
        {
            scanf("%d",&n);
            while (n--)
            {
                scanf("%d",&x);
                c[i][x]++;
                all[x]++;
            }
        }
        sum=0;
        for (i=1;i<=g;i++)
            sum+=all[i]/s;

        aim=bit[b+1]-1;
        memset(mark,0,sizeof(mark));
        memset(dp,inf,sizeof(dp));
        ans=dfs(0,0,mark);
        printf("%d\n",ans-(sum-ans));
    }
    return 0;
}

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

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

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

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


相关推荐

  • postgresql connection refused 5432 win10[通俗易懂]

    postgresql connection refused 5432 win10[通俗易懂]一个小问题困扰了我很久,最后解决了,可是具体问题在哪里我还是没明白。我使用的win10系统,之前eclipsejdbcpostgresql连接完全没有问题,有天发现屏幕下端的搜索框不能使用了,在网上找了解决方法,在powershell上重装了微软小娜,解决了这个搜索框不能使用的问题。可是后来发现eclipse使用jdbc一直连不上postgresql,报错java.net,Conn…

    2022年6月19日
    84
  • linux 中jenkins启动/重启/停止命令 改端口

    linux 中jenkins启动/重启/停止命令 改端口jenkins启动#servicejenkinsstart重启#servicejenkinsrestart停止#servicejenkinsstop默认jenkins端口是8080,如果是jenkins的war包方式启动1.到war包目录执行下面的命令#java-jarjenkins.war–ajp13Port=-1–httpPort=808…

    2022年6月2日
    140
  • Python获取Websocket接口的数据

    Python获取Websocket接口的数据作者:小小明在前面的用Tornado实现web聊天室一文中介绍了python实现websocket的方法,这篇文章将要分享如何用python作为客户端获取websocket接口的数据。前文链接:https://blog.csdn.net/as604049322/article/details/112386560websocket的使用WebSocket是一种在单个TCP/TSL连接上,进行全双工、双向通信的协议。WebSocket可以让客户端与服务器之间的数据交换变得更加简单高效,服务端.

    2022年7月15日
    28
  • linux上安装Docker(非常简单的安装方法)

    linux上安装Docker(非常简单的安装方法)最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!Docker的三大核心概念:镜像、容器、仓库镜像:类似虚拟机的镜像、用俗话说就是安装文件。容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。仓库:类似代码仓库,是Docker集中存放镜像文件的场所。简单介绍一

    2022年6月9日
    36
  • 金蝶显示服务器异常,金蝶迷你版登录提示云服务器异常

    金蝶迷你版登录提示云服务器异常内容精选换一换如果您购买了ECS,而没有对ECS进行主机安全防护,那么您主机将面临账户爆破、异常登录、恶意攻击等安全威胁。购买ECS,勾选开通主机安全,HSS基础版(按需计费)免费赠送。HSS可以帮助您全面识别并管理主机中的信息资产,实时监测主机中的风险并阻止非法入侵行为,帮助企业构建服务器安全体系,降低当前服务器面临的主要安全风险。基础版(按需计费)区块链管理页面…

    2022年4月9日
    88
  • 1.7-工控上位机软件开发平台介绍

    1.7-工控上位机软件开发平台介绍一、前言前面几章一直没有提到上位机的另一个主要使用场合,即“工业上位机软件”。主要是因为本人没有接触过,不敢贸然发表见解类的文章。最近在机缘巧合下,对“工业上位机软件”有了一些初步的了解。在这里和大家分享一下。注意本节的内容还不够专业全面,只适合对“工控软件”进行一个初步的了解。二、工业“自动化”控制系统的组成在工业生产过程中,最重要的是安全,其次是稳定。工业生产环境中可以常见大如“吊车”般的设备、有毒气体、强碱、强酸、几千度的高温、易燃易爆气体、高压水蒸气。所以容不得半点错误,出错就意味着要死人,因

    2022年5月31日
    84

发表回复

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

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