蓝桥杯——灭鼠先锋

  • 博弈论
    本体运用到了基础博弈论的相关知识点,博弈论的本质是让自己处于必胜状态,他人处于必输状态,找到必输状态是核心
  • 博弈论两条状态转换公式
    1. 当前处于必输状态 ⇔ 下一步总能进入必胜状态 2. 存在一种策略 , 使得下一步进入必输状态 ⇒ 当前处于必胜状态 1.当前处于必输状态\Leftrightarrow 下一步总能进入必胜状态 \\ 2.存在一种策略,使得下一步进入必输状态\Rightarrow 当前处于必胜状态 1.当前处于必输状态下一步总能进入必胜状态2.存在一种策略,使得下一步进入必输状态当前处于必胜状态
  • 算法模板
#include<iostream>
#include<bits/stdc++.h>
#include <queue>
#include <algorithm> 
using namespace std;
//博弈论,让自己处于必胜,让对手处于必输
//处于必输状态当且仅当下一步无论怎么走都会导致必胜
//当下一步存在到达必输状态的走法,当前状态为必胜状态
//由于每个人都按照最优策略玩游戏所以只有必胜和必输两种可能,本游戏无随机性 
//初始化为图 
vector<vector<int>>	m(3,vector<int>(5,0));
//记录每个位置的标号
vector<vector<int>>	num(3,vector<int>(5,0));
const int N=1<<8;
//dp[i]表示状态i是否为必胜 
map<int,bool> dp;
//判断当前状态是否只有1个0,如果只剩下一个0,那么一定是必败状态 
bool check(int x){
	int num=0;
	int i=0;
	while(i<8){
		if(x%2==0)	num++;
		x=(x>>1);
		i++;
	}
	if(num==1)	return true;
	else		return false;
}
//判断是否为必胜状态 
bool dfs(int x){
	//轮到你时已经填满了,那么你就赢了 
	if(x==N-1)	return true; 
	//轮到你时还剩1个没填,那你必输 
	if(check(x))	return false;
	if(dp.find(x)!=dp.end())	return dp[x];
	bool flag=true;
	//先考虑当前状态下填2个
	for(int i=1;i<=2;i++){
		for(int j=1;j<=3;j++){
			if(m[i][j]==1||m[i][j+1]==1)	continue;
			m[i][j]=m[i][j+1]=1;
			x=x+(1<<num[i][j])+(1<<num[i][j+1]);
			dp.emplace(x,dfs(x));
			flag=dp[x];
			//回溯
			x=x-(1<<num[i][j])-(1<<num[i][j+1]);
			m[i][j]=m[i][j+1]=0;
			//如果能进入必输状态表明当前状态是必胜状态 
			if(flag==false)	return true; 
		}
	}

	//先考虑当前状态下填1个
	for(int i=1;i<=2;i++){
		for(int j=1;j<=4;j++){
			if(m[i][j]==1)	continue;

			m[i][j]=1;
			x=x+(1<<num[i][j]);
			dp.emplace(x,dfs(x));
			flag=dp[x];
			//回溯
			x=x-(1<<num[i][j]);
			m[i][j]=0;
			//如果能进入必输状态表明为必胜 
			if(flag==false)	return true; 
		}
	}
	return false;
}
int main(){
	//初始化坐标
	int countNum=0;
	for(int i=1;i<=2;i++){
		for(int j=1;j<=4;j++){
			num[i][j]=countNum;
			countNum++;
		}
	}
	bool res[4]; 
	//情况1
	m[1][1]=1;
	dp.emplace(1,dfs(1));
	res[0]=dp[1];
	m[1][1]=0;
	
	//情况2
	 m[1][1]=m[1][2]=1;
	 dp.emplace(3,dfs(3));
	 res[1]=dp[3];
	 m[1][1]=m[1][2];
	 
	 //情况3
	 m[1][2]=1;
	 dp.emplace(2,dfs(2));
	 res[2]=dp[2];
	 m[1][2]=0;
	 
	 //情况4
	 m[1][2]=m[1][3]=1;
	 dp.emplace(6,dfs(6));
	 res[3]=dp[6];
	 m[1][2]=m[1][3]=0;
	 for(int i=0;i<=3;i++){
	 	if(res[i]==false)	cout<<"V";
	 	else				cout<<"L";
	 }
	return 0;	
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
驱虫剂市场的Python分析主要包括对市场的集中度、市场趋势、产品类别和销售额的分析。根据引用\[1\]的数据,计算得出HHI指数为0.00135,表示市场属于不集中度。整体市场趋势向好,竞争对手没有形成垄断局面。而在灭鼠杀虫剂子市场中,占比和增长幅度表现不错。 进一步分析灭鼠杀虫剂市场中最受欢迎的产品类别,可以细分价格段,并对对应属性进行进一步分析。根据引用\[2\]的数据,灭鼠和蟑螂的销售额较高,因此灭鼠这个产品类别是最好的选择。可以通过绘制饼图来更准确地描述销售额的分布情况。 此外,根据引用\[3\]的数据,灭鼠杀虫剂子市场在销售占比和增长趋势上表现不错。可以通过按年份分组的柱状图来详细观察各类目市场销量的占比情况。根据图表分析,可以得出近三年各类目市场销量占比的结论。 综上所述,通过Python分析驱虫剂市场可以得出市场集中度、市场趋势、产品类别和销售额的相关结论。 #### 引用[.reference_title] - *1* *2* *3* [怎么用python电商文本挖掘?(2)](https://blog.csdn.net/wusheng9922/article/details/107156295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值