hdu 4778 Gems Fight!

[Python]:热血传奇-Wzl,Wzx的解析 首先我们要了解,wzl与wzx的对应关系,wzx里面存的是每张二进制图片数据在wzl中的偏移量,所以取到wzx中的偏移数据就可以取到wzl每张图片数据,其实就这么简单。结构体为 [Byte][Byte][Byte][Byte][short][short][short][short][int]-读取44至48字节代表为,[wzx中偏移值总数量] [int类型] [4字节]-根据在wzx中取得的偏移值总数量,每张图片偏移值在wzl中取图片数据。2.[取wzl中图片偏据]:根据wzx中取得数据对[ 阅读详情

        题意:X和Y玩游戏,共有B个包,每个包有ni颗宝石,宝石共G种颜色。X先手,和Y轮流选择一个包,把包里宝石放入一个容器内,如果容器内同色宝石超过S,他就能获得这S颗宝石合成的魔法石。如果某人在某轮合成了魔法石,下一轮仍然由他选包。求在两人均为最优决策的情况下,X能比Y多合成几个魔法石。

        思路:状压DP(记忆化搜索实现)。dp(i,j),i表示哪些包已经被选择,j表示当前该谁选择包,dp(i,j)表示当前局面下,最优决策直到结束,j能比另外一个人多合成几个魔法石。给定一个包的选择状况,容器里的东西是可以确定的,无论已选包以什么顺序选取,这样就可以进行状态转移了。

        代码能力太弱了,调试了好久。先是状态与二进制数的转换没写好,然后是把计算容器中情况写在了递归里却没进行必要的初始化,导致递归到下一层时改变了当前层的内容。以下是我的AC代码,其实它还是有优化的空间的,因为计算容器内情况可以递推预处理完成,减少不必要的重复计算。


#include <iostream>         
#include <stdio.h>         
#include <cmath>         
#include <algorithm>         
#include <iomanip>         
#include <cstdlib>         
#include <string>         
#include <string.h>         
#include <vector>         
#include <queue>         
#include <stack>         
#include <map>       
#include <set>       
#include <ctype.h>         
#include <sstream>     
   
#define ll long long     
#define min3(a,b,c) min(a,min(b,c))  
#define max3(a,b,c) max(a,max(b,c)) 
using namespace std;

#define INF 1000000

int p[22][11];
int dp[2100000][2];
int cnt[2100000];	//对应状态下合成了多少魔法石 

int cooker[9];


int G,B,S;
int dfs(int s,int f){
	if(dp[s][f]!=-INF)return dp[s][f];
	int t=B;
	while(t--){
		if( !(s&(1<<t)) ){
			if(cnt[s]==-1||cnt[s|(1<<t)]==-1){
				cnt[s]=0;
				memset(cooker,0,sizeof(cooker));
				int x=s; 
				int y=1; 
				while(x){
					if(x&1){
						for(int i=1;i<=p[y][0];i++){
							cooker[p[y][i]]++;
						}
					}
					x>>=1;
					y++;
				}
				for(int i=1;i<=G;i++){
					cnt[s]+=cooker[i]/S;
					cooker[i]%=S;
				}
				
				cnt[s|(1<<t)]=cnt[s];
				for(int i=1;i<=p[t+1][0];i++){
					cooker[p[t+1][i]]++;
				}
				for(int i=1;i<=G;i++){
					while(cooker[i]>=S){
						cooker[i]-=S;
						cnt[s|(1<<t)]++;
					}
				}
			}
			int add=cnt[s|(1<<t)]-cnt[s];//如果合成魔法石,下一轮不换人。 
			if(add){
				dp[s][f]=max(dfs(s|(1<<t),f)+add,dp[s][f]);
			}else{
				dp[s][f]=max( -dfs(s|(1<<t),!f),dp[s][f]);
			}
		}
	}
	return dp[s][f];
}

int main(){
	
	while(cin>>G>>B>>S){
		if(G==0&&B==0&&S==0)break;
		memset(cnt,-1,sizeof(cnt));
		for(int i=1;i<=B;i++){
			cin>>p[i][0];
			for(int j=1;j<=p[i][0];j++){
				cin>>p[i][j];
			}
		}

		int end=(1<<B)-1;
		for(int i=0;i<=end;i++){
			dp[i][0]=dp[i][1]=-INF;
		}
		dp[end][0]=dp[end][1]=0;

		int ans=dfs(0,0);
		cout<<ans<<endl;
	}
	return 0;
}


基于STM32设计的老人防摔倒报警设备(OneNet)_65 本文设计了一种基于STM32单片机的智能老人防摔倒报警设备。该系统结合MPU6050陀螺仪传感器实时监测老人的姿态变化,检测摔倒事件;通过SIM800C通信模块发送短信通知紧急联系人,并将GPS定位信息上传至云端平台,确保家属能够及时了解老人的准确位置。 阅读详情

相关推荐

Ubuntu20.04 安装 MATLAB R2023b 常见问题及解决方案

本文提供了Ubuntu20.04系统上安装MATLAB R2023b的完整指南,包括系统要求检查、依赖项安装、详细安装步骤及常见问题解决方案。特别针对GTK模块加载失败、OpenGL图形加速问题和中文显示乱码等常见问题提供了有效解决方法,帮助用户顺利完成安装并优化使用体验。

weixin_42619061的博客 483

HDU 4778 Gems Fight!(dp)

HDU 4778 Gems Fight! 题目链接 题意:有n个背包,包里有一些宝石,现在爱丽丝和你轮流选背包,把包里宝石丢到锅中,然后如果锅中有宝石数量到s个,就会得到魔法石,并且可以继续选背包,两人都按最优策略去取,问最后两人魔法石会差多少。 思路:dp,dp[s]表示选背包状态为s时候的值,然后去记忆化搜索即可,注意如果当前生成魔法石就继续加,否则就减即可 代码:

Remilia's 1212

STM32驱动电磁阀电路设计:从光耦选型到MOSFET驱动的实战解析

本文深入解析了STM32驱动24V电磁阀的完整电路设计,重点探讨了光耦选型与MOSFET驱动两大核心环节。针对电平转换与电气隔离需求,详细对比了EL357N与TLP2310等光耦在CTR、速度及耐压等关键参数上的差异与应用场景。同时,文章提供了MOSFET关键参数解读、驱动电路优化方案(如推挽驱动)以及完整的PCB布局、电源处理与调试避坑指南,旨在帮助工程师构建稳定可靠的工业控制电路。

weixin_29184371的博客 234

HDU 4778 Gems Fight!

题意:给你b个包,每个包里面都有若干宝石,宝石有

黑山老猴妖的专栏 545

Keil MDK安装NRF52832开发环境全攻略(附系统时间错误解决方案)

本文详细介绍了如何使用Keil MDK搭建NRF52832开发环境,包括基础软件安装、项目配置关键步骤以及常见问题解决方案。特别针对系统时间错误导致的编译失败问题提供了实用解决方法,帮助开发者快速上手NRF52832开发。

weixin_29168153的博客 505

无线控制的隐形桥梁:深入解析NRF24L01在电机控制中的数据传输艺术

本文深入解析NRF24L01无线模块在电机控制中的数据传输技术,涵盖通信机制优化、抗干扰策略及实时性保障。通过舵机和无刷电机的实战案例,展示如何构建稳定高效的无线控制系统,为嵌入式开发提供完整解决方案。

j7k8l的博客 333

[博弈dp] hdu 4778 Gems Fight!

题意: 给出g种颜色的宝石,然后有B个背包,S代表到时候每种颜色的宝石凑齐S个能变成一个魔法石 然后B行数输入,每个包里有哪些宝石 然后A,B轮流拿包,每个包只能拿一次,拿出包把宝石放地上。 如果能变成魔法石则拿走魔法石,下一次还这个人拿包,没变成则换人。 魔法石的个数就是获得分数,问两人最优的时候分差是多少。 思路: 只有21个包,状压dp。 然后发现不管顺序如何 最后构成的魔法

Enmity_Dark 1001

【PINN物理信息网络】基于PINN物理信息网络求解泊松方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解泊松方程(python)

k8291121的博客 2812

HDU4778 Gems Fight!

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4778 题目大意:有B个包裹,里面有各种颜色的GEM,共有G个颜色。Alice和Bob轮流挑选包裹放到一个地方,如果挑选出来的同种颜色的GEM超过S个,当前回合者可以得分,每超过S个得一分。如果在回合内得分了,可以额外进行一个回合。问Alice的得分减去Bob的得分最大是多少。 分析:很明显的极大极小

lirh8121099的专栏 821

安路TangDynasty和FD和JTAG驱动器安装

安路FPGA产品矩阵包含SALPHOENIX高性能、SALEAGLE高性价比和SALELF低功耗三大系列,广泛应用于网络通信、消费电子等领域。配套的TangDynasty(TD)集成开发环境支持标准设计输入,提供完整优化流程与调试工具。简要介绍了TD 6.2.1版本的安装步骤。

wangjie36的博客 1033

ubuntu-emto-cpa 测试和使用(单核运行)

ubuntu-emto-cpa 测试和使用(单核运行)

qq_45834835的博客 1400

hdu4778Gems Fight!

Gems Fight! Time Limit: 20000/10000 MS (Java/Others)Memory Limit: 327680/327680 K (Java/Others)Total Submission(s): 566Accepted Submission(s): 239 Problem Description   Alice and Bob are pl...

weixin_30305735的博客 178

自然语言处理NLP星空智能对话机器人系列:Gavin大咖 Transformer 101问答集 第一问

自然语言处理NLP星空智能对话机器人系列:Transformer 101问答 [让天下没有难学的Transformer] 你问我答系列之一 Gavin大咖第一问: Transformer中的可训练Queries、Keys和Values矩阵从哪儿来? 以上是智华解答,供同学们参考。 星空智能对话机器人系列博客 NLP星空智能对话机器人系列:第二次星空智能对话机器人Zoom线上演示安排 NLP星空智能对话机器人系列:StarSpace: Embed All The Things NLP星空智能对

大模型与Agent智能体 991

HDU 4778 Gems Fight!

Problem Description Alice and Bob are playing "GemsFight!": There are Gems of G different colors , packedin B bags. Each bag has several Gems. G different colors are numbered fromcolor 1 to color G.

涅槃phy的专栏 1204

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

hdu4778 Gems Fight!

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others) Total Submission(s): 1912    Accepted Submission(s): 824 Problem Description   Alice and Bob are play

新月 795

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

hdu4778——Gems Fight!

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4778 题目大意 博弈问题,有G种颜色,B个包,A先手,B后手,依次从B个包中选一个(被选过的不准再选),放入公共的cooker里,当某种相同颜色的数量到达一个阈值S,就融合成一个魔法石。每次拿完,如果产生融合,拿的人可以再拿一次(可重复),问 A 的魔法石与 B 的魔法石的差值。 解题思路 第一个想法是状压dp+记忆化搜索,注意只要是相同的包被拿,不管每次拿的顺序,那么最后cooker里的状态(即每种颜色的数量

hhhcbw的博客,欢迎各位来访 256

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

HDU 4778 Gems Fight!_状压

原题: Gems Fight! Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others) Total Submission(s): 743    Accepted Submission(s): 314 Problem Description   A

u011343989的专栏 1068

HDU4778 Gems Fight!(记忆化搜索+博弈)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4778 题目大意:有B个包裹,里面有各种颜色的GEM,共有G个颜色。Alice和Bob轮流挑选包裹放到一个地方,如果挑选出来的同种颜色的GEM超过S个,当前回合者可以得分,每超过S个得一分。如果在回合内得分了,可以额外进行一个回合。问Alice的得分减去Bob的得分最大是多少。 #include

芒果街上的小屋(此博客暂时停用) 775

hdu 4778 Gems Fight!

状态压缩+dp 因为bag数不超过21,所以我们用state表示: 0代表已经用过bag,1代表还没用过。 dp【state】表示在当前状态下先手可获得最大差值。 因为当你不管什么顺序选取bag,熔炉里的状态都是相同的,所以预处理出熔炉状态。 状态转移方程:当有获得宝石x个,dp【state】=max(dp【state】,x+dp【state ' 】); 当没有获得宝石,dp【state

1061

HDU 4778 Gems Fight! 解题报告

题目 题意: 有一些背包,每个包里有一些宝石,A和B两人轮流操作,每次可以选一个包,将里面的宝石都放到公用坩埚里。如果坩埚里有某种颜色宝石的数目不少于s个,那么每s个这种颜色的宝石可以变成一个魔法石。如果操作者选完包后能得到魔法石,则他可以再操作一次。每个人都是最优策略(宝石尽可能比对方多),且可操作的时候必须操作,求A最多可以比B多多少魔法石。 题解: 可以用状压来做,i为哪些包选了,j

Tri_integral的专栏 1407
上一篇: hdu 4770 Lights Against Dudely
下一篇: hdu 4772 Zhuge Liang's Password
squee_spoon
博客等级 码龄14年 61粉丝 455原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值