JZOJ 1266. 玉米田

目录:


题目:

单击查看题目


分析:

先用二进制表示每一行的是否可以放置的状态。
然后用 state[i] s t a t e [ i ] 来表示只计算单行第 i i 种状态是否合法。
然后每次将状态左移和右移一位然后用&运算判断是否合法就行了。
之后我们开始dp
f[i][j]表示第i行第j种状态的方案数。然后我们枚举上一行的状态 k k ,然后判断两个状态是否合法。
对于f的初始化,则是 f[0][0] f [ 0 ] [ 0 ] 等于1


代码:

#pragma GCC optimize("Os")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define LL long long
using namespace std;
inline LL read() {
    LL d=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
    return d*f;
}
int state[4096],t[13][13],e[13],f[13][4096];
int main()
{
/*  freopen("cowfood.in","r",stdin);
    freopen("cowfood.out","w",stdout);*/
    int n=read(),m=read(),ms;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
        t[i][j]=read();
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
        e[i]=(e[i]<<1)+t[i][j];
    ms=1<<m;
    for(int i=0;i<ms;i++)
      state[i]=((i&(i<<1))==0)&&((i&(i>>1))==0);
    f[0][0]=1;
    for(int i=1;i<=n;i++)
      for(int j=0;j<ms;j++)
        if(state[j]&&((j&e[i])==j))
          for(int k=0;k<ms;k++)
            if((k&j)==0)
              f[i][j]=(f[i][j]+f[i-1][k])%1000000000;
    int ans=0;
    for(int i=0;i<ms;i++)
      ans=(ans+f[n][i])%1000000000;
    printf("%d",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import tensorflow as tf from tensorflow import keras from tensorflow.keras.preprocessing.image import ImageDataGenerator # 设置随机种子,保证结果可复现 tf.random.set_seed(42) # 定义数据生成器 datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2) # 设置数据目录 train_dir = 'train_directory' test_dir = 'test_directory' # 从数据目录加载数据 train_generator = datagen.flow_from_directory( train_dir, target_size=(150, 150), batch_size=32, class_mode='categorical', subset='training' ) validation_generator = datagen.flow_from_directory( train_dir, target_size=(150, 150), batch_size=32, class_mode='categorical', subset='validation' ) # 定义模型 model = keras.Sequential([ keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)), keras.layers.MaxPooling2D(2, 2), keras.layers.Conv2D(64, (3, 3), activation='relu'), keras.layers.MaxPooling2D(2, 2), keras.layers.Conv2D(128, (3, 3), activation='relu'), keras.layers.MaxPooling2D(2, 2), keras.layers.Flatten(), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(4, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_generator, epochs=10, validation_data=validation_generator) # 评估模型 test_generator = datagen.flow_from_directory( test_dir, target_size=(150, 150), batch_size=32, class_mode='categorical' ) results = model.evaluate(test_generator) print('测试集准确率:', results[1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值