Wooden Signs Gym - 101128E DP




题意:n块木板纵向摆放,给出n+1个数,第一个数先给出最底层木板的尾部,剩余n个数是每块木板的头部的位置,尾部只能和下面与其相邻的木板的头部或者尾部的位置重合,并且不能出现图中打叉号的情况,问一共有几种满足顺序的排列。

思路:考虑DP求解,dp[i][j]表示第i个木板尾部在j的时候一共有几种排列情况。

因为头部是固定的,所以很自然可以想到枚举尾部的情况,而尾部的情况又是根据上一块木板的头尾决定的,这样基于上一个状态转移到当前状态,就可以用DP求解。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[2002][2002];
int a[2002];
const int mod=2147483647;
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<=n;i++)
	cin>>a[i];
	dp[1][a[0]]=1;//初始化,第一块木板的尾部只有一个位置
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=n+1;j++)
		{
			int l=min(j,a[i-1]),r=max(j,a[i-1]);//l为上一层的左端点,r为右端点(这里不再区分头和尾是怕混淆)
			if(a[i]>l)
			{
				dp[i][l]+=dp[i-1][j];
				dp[i][l]%=mod;
			}
			if(a[i]<r)
			{
				dp[i][r]+=dp[i-1][j];
				dp[i][r]%=mod;
			}
		}
	}
	ll ans=0;
	for(int i=1;i<=n+1;i++)
	ans+=dp[n][i],ans%=mod;
	cout<<ans;
}


针对 traffic-signs-data 数据集进行多分类预测,同样可以使用卷积神经网络 (Convolutional Neural Network, CNN)。以下是基于 Keras 和 TensorFlow 框架实现的 Python 代码: ```python import os import numpy as np import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator # 数据集路径 data_dir = '/path/to/traffic-signs-data' train_dir = os.path.join(data_dir, 'train') val_dir = os.path.join(data_dir, 'val') test_dir = os.path.join(data_dir, 'test') # 数据预处理 train_datagen = ImageDataGenerator( rescale=1./255, rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest') val_datagen = ImageDataGenerator(rescale=1./255) test_datagen = ImageDataGenerator(rescale=1./255) # 训练集、验证集、测试集 train_generator = train_datagen.flow_from_directory( train_dir, target_size=(32, 32), batch_size=32, color_mode='grayscale', class_mode='categorical') val_generator = val_datagen.flow_from_directory( val_dir, target_size=(32, 32), batch_size=32, color_mode='grayscale', class_mode='categorical') test_generator = test_datagen.flow_from_directory( test_dir, target_size=(32, 32), batch_size=32, color_mode='grayscale', class_mode='categorical') # 搭建模型 model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(32,32,1)), tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Conv2D(128, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D((2,2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(43, activation='softmax') ]) # 编译模型 model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # 训练模型 history = model.fit_generator( train_generator, steps_per_epoch=100, epochs=50, validation_data=val_generator, validation_steps=50) # 评估模型 test_loss, test_acc = model.evaluate_generator(test_generator, steps=50) print('test acc:', test_acc) ``` 在上述代码中,我们同样使用了 ImageDataGenerator 对数据进行了数据增强,并利用 flow_from_directory() 方法从文件夹中读取数据,分别构建了训练集、验证集、测试集。基于 Sequential 模型搭建了卷积神经网络模型,并使用 compile() 方法对模型进行编译。最后使用 fit_generator() 方法训练模型,evaluate_generator() 方法评估模型。需要注意的是,traffic-signs-data 数据集中的图片是灰度图,因此需要将 color_mode 设置为 'grayscale'。另外,输出层的神经元个数为 43,对应数据集中的 43 种交通标识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值