[UVA1637]Double Patience && 概率

一直以为只要连着两个数组a b 一起开就可以直接memset(a, 0, sizeof(a) + sizeof(b)) 结果果断RE了 而且一直不懂 只道hlq大神告诉我这个错了我才知道 我猜可能只有开在一行的才行吧  或者是相同类型?


九维数组表示当前每一堆排的状态 然后直接枚举可行操作算概率 就这样= = 

#include<cstdio>
#include<algorithm>
#include<cstring>
#define dNow d[s1][s2][s3][s4][s5][s6][s7][s8][s9]
#define vNow vis[s1][s2][s3][s4][s5][s6][s7][s8][s9]
#define SF scanf
#define PF printf
using namespace std;
const int MAXN = 5;
double d[MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1];
bool vis[MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1][MAXN+1];
char s[5][10], A[10][10];
int n = 9;
double dfs(int s1, int s2, int s3, int s4, int s5, int s6, int s7, int s8, int s9)
{
	if(vNow) return dNow;
	vNow = true;
	bool ok = true;
	double cnt = 0, &ans = dNow;
	int	tot = 0;
	int T[10] = { 0, s1, s2, s3, s4, s5, s6, s7, s8, s9 };
	for(int i = 1; i <= n; i++) if(T[i]) { ok = false; break; }
	if(ok) return ans = 1.0;
	for(int i = 1; i <= n; i++) 
	{
		if(!T[i]) continue;
		for(int j = i + 1; j <= n; j++)
		{
			if(A[i][T[i]] == A[j][T[j]])
			{
				T[i]--; T[j]--; tot++;
				cnt += dfs(T[1], T[2], T[3], T[4], T[5], T[6], T[7], T[8], T[9]);
				T[i]++; T[j]++;
			}
		}
	}
	if(cnt > 0) ans = cnt / (1.0 * tot);
	return ans;
}	
int main()
{
	while(~SF("%s%s%s%s", s[1], s[2], s[3], s[4]))
	{
		memset(d, 0, sizeof(d) + sizeof(vis)); 
		for(int i = 1; i <= 4; i++) A[1][i] = s[i][0];
		for(int j = 2; j <= 9; j++)
		{
			SF("%s%s%s%s", s[1], s[2], s[3], s[4]);
			for(int i = 1; i <= 4; i++) A[j][i] = s[i][0];
		}
		dfs(4, 4, 4, 4, 4, 4, 4, 4, 4);
		PF("%lf\n", d[4][4][4][4][4][4][4][4][4]);
	}
}


### Patience的含义 在机器学习的Early Stopping策略中,Patience指的是当Early Stopping被激活(例如发现loss相比上一个epoch训练没有下降),则经过Patience个epoch后停止训练[^1][^2]。它是一个用于控制Early Stopping触发时机的超参数。 ### Patience的作用 Early Stopping的主要作用是防止过拟合,而Patience在其中起到了平衡模型训练的“火候”的关键作用。如果Patience设置得太小,模型可能会过早停止训练,导致代价函数的值不够小,模型的潜力没有被充分挖掘;如果Patience设置得太大,模型可能会继续训练过多的epoch,从而增加过拟合的风险。因此,合理设置Patience可以在充分训练模型和防止过拟合之间找到一个较好的平衡点[^1]。 ### Patience的使用方法 以下是在不同框架中使用Early Stopping并设置Patience的示例: #### FastText中使用early_stopping ```python # 假设已经有了FastText模型和数据 monitor = 'val_acc' # 需要监视的量,这里是模型准确率 patience = 3 # 当early stop被激活,则经过3个epoch后停止训练 verbose = 1 # 信息展示模式 mode = 'max' # 在max模式下,当检测值不再上升的时候则停止训练 # 这里只是示例,实际FastText的early_stopping设置可能有所不同 # 实际中可以根据FastText的文档进行具体设置 ``` #### Keras中使用Early Stopping ```python from keras.callbacks import EarlyStopping from keras.models import Sequential from keras.layers import Dense import numpy as np # 生成一些示例数据 train_X = np.random.rand(100, 10) train_y = np.random.randint(0, 2, 100) test_X = np.random.rand(20, 10) test_y = np.random.randint(0, 2, 20) # 构建一个简单的Keras模型 model = Sequential() model.add(Dense(10, input_dim=10, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 定义EarlyStopping回调函数 early_stopping = EarlyStopping(monitor='val_loss', patience=5, verbose=2) # 训练模型 history = model.fit(train_X, train_y, epochs=30, batch_size=10, validation_data=(test_X, test_y), verbose=2, shuffle=False, callbacks=[early_stopping]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值