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


相关推荐

  • 寄存器,移位寄存器的电路原理以及verilog代码实现「建议收藏」

    寄存器,移位寄存器的电路原理以及verilog代码实现「建议收藏」寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器:逻辑功能分析:1.异步端CR置0时,输出置0;2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0

    2022年7月1日
    98
  • pycharm报错traceback most_cm3d2报错error

    pycharm报错traceback most_cm3d2报错errorPycharm报错Pythonerror:PermissionError:[Errno13]Permissiondenied:在pycharm中读取csv文件时,出现错误PermissionError:[Errno13]Permissiondenied:。看了大部分博客说是因为文件权限问题,或者文件被手动打开,这两个方法都试了试后,无效。解决问题的方法:配置Python编译器时将ScriptPath的路径写到脚本的具体路径,要包含脚本的文件名。如下图。…

    2022年8月26日
    5
  • 使用zabbix监控redis内存使用

    使用zabbix监控redis内存使用本篇提到的监控环境是有条件的,即默认单机只运行一个redis实例,且默认运行的端口是6379(也可以是其他端口,需要通过sed-i’s/6379/你修改的端口/g’xml模板文件修改模板文件里的端口号)。即然有这么多局限,岂不是适应用环境很差。确实,本篇算是一个基础部分,为后面提到的lld(lowleveldiscovery)自动发现做铺垫。由于前面几部分也对基础的东西做了很多总结…

    2022年5月18日
    38
  • sklearn库安装_sklearn简介[通俗易懂]

    sklearn库安装_sklearn简介[通俗易懂]Scikitlearn也简称sklearn,是机器学习领域当中最知名的python模块之一。sklearn包含了很多机器学习的方式:Classification分类Regression回归Clustering非监督分类Dimensionalityreduction数据降维ModelSelection模型选择Preprocessing数据与处理使用sklea…

    2022年10月9日
    1
  • Dell服务器误删阵列恢复操作

    Dell服务器误删阵列恢复操作确认机器是否阵列(此例为阵列五)已丢失,然后配置idrac配置完成退出BIOS,让机器自然运行,进不去系统没关系正常磁盘掉线状态为Foreign,目前操作是误删了阵列所以磁盘全为ready模式,Foreign那块是后加的raid0(导回即可)这边机器退出BIOS开机以后,需要idrac收集一份日志(日志系统日志与存储日志)然后排查日志,发现日志有删除动作,但是没有格式化磁盘(应该是误删操作)在误删阵列,但是没有格式化的情况下啊,大概率实现资料恢复(先确认机器之前是什.

    2022年6月15日
    92
  • 422模块接线_422接口定义

    422模块接线_422接口定义#硬件芯片422引脚连接方式前言参考连接对应表举例-正好拿手头的一款芯片链接举例查手册前言最近调试串口转422程序,便买了一个“多功能5和1的转换器“,如下图所示,但是调试的时候,没怎么看线序,改线后忘记如何连接,只能重新查找资料,为例方便更多人也方便自己记录参考。参考连接个人觉的写言简意赅的,美中不足的地方就是看着费劲,所以优化了一下。参考如下连接:https://blog.csdn.net/fzktongyong/article/details/86163206对应表举例-正好拿手头的

    2022年8月30日
    5

发表回复

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

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