HDU 4778 Gems Fight!(dp)

HDU 4778 Gems Fight!(dp)

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

HDU 4778 Gems Fight!

题目链接

题意:有n个背包,包里有一些宝石,如今爱丽丝和你轮流选背包,把包里宝石丢到锅中,然后假设锅中有宝石数量到s个,就会得到魔法石,而且能够继续选背包,两人都按最优策略去取,问最后两人魔法石会差多少。

思路:dp,dp[s]表示选背包状态为s时候的值,然后去记忆化搜索就可以,注意假设当前生成魔法石就继续加,否则就减就可以

代码:

#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;const int INF = 0x3f3f3f3f;const int N = 21;int g, b, s, dp[(1<<N) + 5], vis[(1<<N) + 5];int yu[(1<<N) + 5][10];struct Page {    int num;    int a[10];} p[N];int cal(int S, int u) {    int ans = 0;    for (int i = 1; i <= g; i++) {	ans += (yu[S][i] + p[u].a[i]) / s;    }    return ans;}int dfs(int now) {    int &tmp = dp[now];    if (vis[now]) return tmp;    vis[now] = 1;    tmp = 0;    int Min = INF, Max = -INF;    if (now == (1<<b) - 1) return tmp;    for (int i = 0; i < b; i++) {	if (now&(1<<i)) continue;	int sb = cal(now, i);	int next = (now|(1<<i));	if (sb != 0) {	    Max = max(Max, dfs(next) + sb);	}	else {	    Min = min(Min, dfs(next));	}    }    tmp = max(Max, -Min);    return tmp;}int main() {    while (~scanf("%d%d%d", &g, &b, &s) && g || b || s) {	for (int i = 0; i < b; i++) {	    memset(p[i].a, 0, sizeof(p[i].a));	    scanf("%d", &p[i].num);	    int tmp;	    for (int j = 0; j < p[i].num; j++) {		scanf("%d", &tmp);		p[i].a[tmp]++;	    }	}	for (int i = 0; i < (1<<b); i++) {	    vis[i] = 0;	    for (int j = 0; j < b; j++) {		if (i&(1<<j)) continue;		for (int k = 1; k <= g; k++) {		    yu[i|(1<<j)][k] = (yu[i][k] + p[j].a[k]) % s;		}	    }	}	printf("%d\n", dfs(0));    }    return 0;}

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

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

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


相关推荐

  • Linux内核分析及内核编程[通俗易懂]

    Linux内核分析及内核编程[通俗易懂]倪继利著2005年8月出版ISBN7-121-01518-5900页88.00元(估价)倪 倪继利著2005年8月出版ISBN7-121-01518-5900页88.00元(估价)倪 内容简介  本书作者在整理自己多年研发笔记的基础上,以精心挑选的典型开发实例向读者详细地讲述了内核源代码的各部分结构、原理及组成框架,主要分析了Linux最新版本(2.6.11)的内核源代码,帮助读者深入

    2022年10月8日
    3
  • .net 4.0 ValidateRequest=”false” 无效「建议收藏」

    .net 4.0 ValidateRequest=”false” 无效「建议收藏」
    当你在安装了.NETFramework4.0以上版本后,当你的应用程序以.NETFramework4.0为框架版本,你的任意服务器请求,都将被进行服务器请求验证(ValidationRequest),这不仅包括ASP.NET,同时也包括WebServices等各种HTTP请求,不仅仅针对aspx页面,也针对HTTPHandler,HTTPModule等,因为这个验证(Valify)的过程,将会发生在BeginRequest事件之前。
       问题的解决方案就是在全局级别(

    2022年6月6日
    40
  • xinetd 说明

    xinetd 说明xinetd 是什么 1 什么是 xinetdextend 是新一代的网络守护进程服务程序 又叫超级 Internet 服务器 常用来管理多种轻量级 Internet 服务 xinetd 提供类似于 inetd tcp wrapper 的功能 但是更加

    2025年10月25日
    5
  • 机器学习:回归问题

    机器学习:回归问题回归,我第一次看到回归的时候,想的就是回归是什么意思?后来看了一个答案解释很有意思,回归这个词来自于生物学,在调查父母与子代身高问题的时候,发现父母如果过高的话,子女就会比父母矮一点,如果父母矮的话,

    2022年8月6日
    7
  • 何为堡垒机

    何为堡垒机

    2021年5月10日
    153
  • Windows系统日志分析_windows系统事件日志

    Windows系统日志分析_windows系统事件日志Windows操作系统的日志分析Windows日志简介Windows操作系统在其运行的生命周期中会记录其大量的日志信息,这些日志信息包括:Windows事件日志,Windows服务器角色日志,FTP日志,邮件服务日志,MSSQLServer数据库日志等。主要记录行为当前的日期、时间、用户、计算机、信息来源、事件、类型、分类等信息。用户可以通过它来检查错误发生的原因,处理应急事件,提供溯源,这些日志信息在取证和溯源中扮演着重要的角色。Windows日志事件类型Windows操作系统日志分析Wi

    2025年10月2日
    1

发表回复

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

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