POJ 3254 Corn Fields(状压DP入门)

YOLOv8魔改网络后训练全零?别慌,关掉AMP混合精度训练试试 本文探讨了YOLOv8魔改网络后训练出现全零指标的问题,指出AMP混合精度训练与自定义网络结构的不兼容性。通过分析梯度消失现象和AMP工作原理,提供了关闭AMP、调整学习率等解决方案,并建议预防性开发实践以避免类似问题。 阅读详情

题意:一个m*n(m, n <= 12)矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,

要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)


思路:可以看代码中的注释。转移方程:dp[i][sta] = ∑(dp[i-1][sta']) (sta‘为与sta不冲突的状态)


带注释代码:

#include <cstdio>
#include <cstring>
using namespace std;

#define mod 100000000
int M,N,top = 0;
//top表示每行最多的状态数

int state[600],num[110];  
//state存放每行所有的可行状态(即没有相邻的状态
//

int dp[20][600];
//dp[i][j]:对于前i行数据,每行有前j种可能状态时的解
int cur[20];
//cur[i]表示的是第i行整行的情况

inline bool ok(int x){	//判断状态x是否可行
   if(x&x<<1)	return false;//若存在相邻两个格子都为1,则该状态不可行
   return true;
}
void init(){			//遍历所有可能的状态
   top = 0;
   int total = 1 << N; //遍历状态的上界
   for(int i = 0; i < total; ++i){
       if(ok(i))state[++top] = i;	
   }
}
inline bool fit(int x,int k){ //判断状态x 与第k行的实际状态的逆是否有‘重合’
   if(x&cur[k])return false; //若有重合,(即x不符合要求)
   return true;  //若没有,则可行
}

int main(){
    while(scanf("%d%d",&M,&N)!= EOF){
       init();
       memset(dp,0,sizeof(dp));
       for(int i = 1; i <= M; ++i){
           cur[i] = 0;
           int num;
           for(int j = 1; j <= N; ++j){  //输入时就要按位来存储,cur[i]表示的是第i行整行的情况,每次改变该数字的二进制表示的一位
                scanf("%d",&num);  //表示第i行第j列的情况(0或1)
               if(num == 0) //若该格为0	
				   cur[i] +=(1<<(j-1)); //则将该位置为1(注意要以相反方式存储,即1表示不可放牧
           }
       }
       for(int i = 1;i <= top;i++){
           if(fit(state[i],1)){  //判断所有可能状态与第一行的实际状态的逆是否有重合
                dp[1][i] = 1;  //若第1行的状态与第i种可行状态吻合,则dp[1][i]记为1
           }
       
	   }

	   /*
	   状态转移过程中,dp[i][k] =Sigma dp[i-1][j] (j为符合条件的所有状态)
		*/
       for(int i = 2; i <= M; ++i){  //i索引第2行到第M行
           for(int k = 1; k <= top; ++k){ //该循环针对所有可能的状态,找出一组与第i行相符的state[k]
                if(!fit(state[k],i))continue; //判断是否符合第i行实际情况
                for(int j = 1; j <= top ;++j){ //找到state[k]后,再找一组与第i-1行符合,且与第i行(state[])不冲突的状态state[j]
                   if(!fit(state[j],i-1))continue;  //判断是否符合第i-1行实际情况
                   if(state[k]&state[j])continue;  //判断是否与第i行冲突
                   dp[i][k] = (dp[i][k] +dp[i-1][j])%mod;  //若以上皆可通过,则将'j'累加到‘k'上
                }
           }
       }
       int ans = 0;
       for(int i = 1; i <= top; ++i){ //累加最后一行所有可能状态的值,即得最终结果!!!泥马写注释累死我了终于写完了!
           ans = (ans + dp[M][i])%mod;
       }
       printf("%d\n",ans);
   }
}

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 13;
const int mod = 1e8;
int state[1<<maxn], dp[maxn][1<<maxn];
int cur[maxn], m, n, top;

bool ok(int x)
{
    return !(x&x<<1);
}

void init()
{
    top = 0;
    int total = 1<<n;
    for(int i = 0; i < total; i++)
        if(ok(i))
            state[top++] = i;
}

bool fit(int x, int k)
{
    return !(x&cur[k]);
}

int main(void)
{
    while(cin >> m >> n)
    {
        init();
        memset(dp, 0, sizeof(dp));
        for(int i = 1; i <= m; i++)
        {
            cur[i] = 0;
            int x;
            for(int j = 1; j <= n; j++)
            {
                scanf("%d", &x);
                if(!x)
                    cur[i] += 1<<(j-1);
            }
        }
        for(int i = 0; i < top; i++)
            if(fit(state[i], 1))
                dp[1][i] = 1;
        for(int i = 2; i <= m; i++)
            for(int k = 0; k < top; k++)
            {
                if(!fit(state[k], i)) continue;
                for(int j = 0; j < top; j++)
                {
                    if(!fit(state[j], i-1)) continue;
                    if(state[k]&state[j]) continue;
                    dp[i][k] = (dp[i][k]+dp[i-1][j])%mod;
                }
            }
        int ans = 0;
        for(int i = 0; i < top; i++)
            ans = (ans+dp[m][i])%mod;
        printf("%d\n", ans);
    }
    return 0;
}




LVGL在嵌入式Linux系统上的高效移植与优化实践 本文详细介绍了在嵌入式Linux系统(特别是ARM平台)上移植和优化LVGL图形库的完整实践流程。内容涵盖从开发环境搭建、代码获取、CMake工程配置,到关键配置文件定制、显示与输入设备端口移植,以及内存、渲染等核心性能优化技巧,旨在帮助开发者高效构建流畅的嵌入式UI应用。 阅读详情

相关推荐

我用 AI 做了个开源地图工具:从 OpenStreetMap 一键获取全国 AOI/POI 数据

本文介绍了一款免费开源的OSM数据查询与可视化工具,旨在解决Overpass QL语法晦涩、数据获取门槛高的问题。工具支持面数据(AOI)、点数据(POI)及路网三种查询模式,内置30+常用模板实现一键检索。具备高德与OSM双底图切换、坐标自动转换功能,支持GeoJSON、SHP、CSV多格式导出,同时保留自定义查询能力。作为纯HTML单文件应用,可零成本部署至GitHub Pages在线使用。该工具有效降低了地理数据获取难度,是替代商业地图API、高效提取全球开源地理信息的实用利器。

weixin_45812624的博客 591

卡常数技巧

POJ-1742 Coins POJ-1742 Coins https://vjudge.net/problem/POJ-1742 此生不上HDU 一份代码交HDU过,交POJ就T…… 中间的绿是用旁边大佬的跟我一模一样的代码交的。 加读入优化:TLE 数组改到最小:TLE int数组改成bool:AC 最初HDU上A了,POJ上T了的代码: #incl...

ixRic 1229

微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付

结果几个接口,最终获得到到一直包含调起微信客户端的支付链接 但是直接打开这个页面,却不能调起微信客户端支付,原因是,在打开新页面的时候,需要设置a.rel = "noreferrer"; <body> <a href="javascript:void(0)" onclick="openNewWindowNoreferrer(this)">点击支付</a&...

qq_31683775的博客 4万+

状态压缩入门 POJ - 3254

转载自点击打开链接    #include #include using namespace std; #define mod 100000000 int M,N,top = 0; //top表示每行最多的状态数 int state[600],num[110]; //state存放每行所有的可行状态(即没有相邻的状态 // int dp[20][600]; //dp[i][j]

now_ing的博客 296

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置)

本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。

weixin_29228781的博客 521

STM32实战:手把手教你移植CanFestival协议栈(附完整代码)

本文提供了一份详尽的STM32平台移植CanFestival协议栈的实战指南。文章从工程搭建、定时器驱动、CAN硬件适配到对象字典配置,手把手讲解核心步骤,并附完整代码示例。重点剖析了时间管理、报文收发等关键环节的实现与常见问题解决方案,旨在帮助开发者深入理解并成功实现CANopen通信。

kiwi8的博客 274

状态压缩入门(Poj3254)

题目: Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettab...

偷吃了老鼠的土豆 225

HBuilderX结合Android Studio实现Uniapp安卓Apk高效离线打包指南

本文提供了一份详细的Uniapp安卓Apk离线打包实战指南。通过整合HBuilderX与Android Studio,手把手教你搭建本地编译环境、配置原生工程、执行核心打包流程,并分享快速更新资源和排查常见问题的技巧,助你彻底摆脱云端打包的排队依赖,实现高效、可控的应用构建。

weixin_28835551的博客 559

【poj 3254】Corn Fields 状压动规

传送门【题目大意】一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)额,好像是玉米。。举个例子:2 3 1 1 1 0 1 0表示2*3的玉米地,现在一共有多少种种植方法呢? 答案:种0个玉米(算一个合法方案)+种1个玉米(4)+种2个玉米

Qantun_Mechanics的博客 659

PowerShell 升级到 v7 并设置为默认版本(详细操作指南)

本文详细介绍了如何将PowerShell升级到v7并设为默认版本。PowerShell 7基于.NET Core构建,具有跨平台支持、性能优化和新语法特性等优势。文章提供了多种安装方法(MSI安装包、包管理器)和设置默认版本的方案(修改PATH、创建符号链接、配置编辑器等),同时涵盖企业批量部署解决方案和常见问题处理。通过升级到PowerShell 7,用户可以获得更强大的命令行体验,适用于开发、运维和自动化场景。

huluang的专栏 4298

Python爬虫实战:利用Requests-HTML与异步技术高效爬取B站视频信息及弹幕数据分析

B站的弹幕,远非简单的评论功能,它是一种独特的、实时互动的社交方式,是观众情感的集体宣泄和共鸣。无论是用于内容创作者优化视频结构,还是用于社会学、传播学的研究,亦或是简单的个人兴趣分析,都具备极高的价值。stop_words = {'的', '了', '是', '我', '你', '他', '她', '它', '在', '有', '不', '吗', '吧', '啊', '这', '那'}本文不仅是代码的堆砌,更注重原理的剖析、反爬策略的应对以及工程化的思考,旨在为读者提供一份紧跟技术前沿的实战指南。

2201_76125261的博客 390

POJ 3254 Corn Fields 状压dp入门

Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15374 Accepted: 8090 DescriptionFarmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M

ywq12138的博客 316

高项备考论文:规划绩效域

高项备考论文:规划绩效域

liuxu324的博客 1129

POJ3254 Corn Fields 【状压DP入门】

【题目大意】 读入两个数m,n;然后下面一个m*n的矩形,由0或1组成。 如果该格为0,则表示该处的土地不肥沃,不能放牛。 如果该格为1,则表示该处的土地肥沃,可以放牛。 求出最后Farmer John放牛的方案数。 【解题思路】 观察到数据规模只有12,但是要求取模1e8,所以优先考虑状态压缩DP 由于m,n都是随读入变化,全部考虑很麻烦,所以我们固定列,只考虑行。 设dp[i]

Lannister_Stark的博客 383

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

poj 3254 Corn Fields 状压dp入门题

题目:点击打开链接 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案) 分析:状压dp的入门题,这题就是把每一行等效成一个数,由于是由01表示的,所以很容易想到整行用一个二进制来等价,因为1表示可以选,0表示不可以选,那么这

01的世界 471

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

poj 3254 Corn Fields 【状压 DP 入门】

Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9648   Accepted: 5110 Description Farmer John has purchased a lush new rectangular pasture compos

世界很大 617

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

POJ - 3254 Corn Fields(状压DP入门)

题目: Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettab...

JingluoZZZ 313

poj 3254 Corn Fields 状压dp入门

题目链接 题意 在\(M\times N\)的\(0,1\)格子上放东西,只有标记为\(1\)的格子可以放东西,且相邻的格子不能同时放东西。问有多少种放法。 思路 参考:swallowblank. \(dp[i][state]\)表示放到第\(i\)行状态为\(state\)时的情况总数。显然有 \[dp[i][state]=\sum dp[i-1][state']\] 其中,\(sta...

ahu12345678的博客 160

POJ 2441 Arrange the Bulls && POJ 3254 Corn Fields 状压DP入门

传送门:POJ2441 题意:将n头牛分到m个牛栏里,每头牛都有自己喜欢的牛栏,每个牛栏只能放一头牛,问共有多少种分配方案。 思路:由于n和m都很小,状压搞一搞就好了,dp[i]表示m个牛栏的状态为i的分配方案(将i转化为2进制,1表示有牛,0表示没有牛) __builtin_popcount(k)返回k的二进制中有多少个1 代码: #include #include #include

WA是一笔财富 278

poj3254 Corn Fields 状压DP入门

#include #include #include #include #include #include using namespace std; const int maxn = (1<<13) + 5; const int INF = 0x7f7f7f7f; const int mode = 100000000; int a[maxn], b[maxn]; long long f[12][

wenzhunpu的专栏 401

Corn Fields POJ - 3254 (状压DP入门)

Corn Fields 题目链接: POJ - 3254题意:M*N的牧场, 1表示可以放牧, 0表示不能放牧, 放牧的两块地皮不能接壤, 问有几种放牧方案;思路:第i行放牧方案至于i-1行有关, 因为放牧不能上下相邻;          第i行某方案可行,...

Sirius_han的博客 427

状压DP入门-POJ3254corn fields

状态压缩dp入门题目。

This is war of mine. 1414

poj 3254 Corn Fields--状压dp入门

原题链接:http://poj.org/problem?id=3254 题意:给出一个n行m列的草地,1表示肥沃,0表示贫瘠,现在要把一些牛放在肥沃的草地上,但是要求所有牛不能相邻,问你有多少种放法。 分析:http://www.tuicool.com/articles/JVzMVj #define _CRT_SECURE_NO_DEPRECATE #pragma c

半壶老酒 687

Corn Fields POJ - 3254 入门状压dp

题意:有n*m大的一个地方,1表示土地肥沃可以种植物,0表示不能种植物,问:在不许有两个植物相邻的情况下,有多少种放置的方法。 我们用数字0,1来表示各个行的状态,也就是植物的放置与否,而这些0,1的组成是可以转换为整形存到数组中的,所以就类似于对于一个集合的操作就是整形的操作。转移很显然,就是d[i][j]+=d[i-1][k] k是与j合法的摆放情况 这一题,重点在于不合法的位置判断。

熟睡的哲学家的博客 226

poj 3254 Corn Fields(状压DP入门)

Corn FieldsTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 18070 Accepted: 9509DescriptionFarmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12)...

Timeclimber 391

POJ 3254 Corn Fields //入门状压dp

状态压缩动态规划入门

郑在努力~ 947
上一篇: Lightoj 1011 Marriage Ceremonies(状压dp入门 or km板子)
下一篇: POJ 1185 炮兵布阵 (经典状压DP)
cillyb
博客等级 码龄11年 225粉丝 497原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值