【POJ3740】Easy Finding,解题报告+思路+代码

Vue和Vue-Element-Admin(六):集成中的CORS(跨域资源共享)问题 在vue-element-admin登录集成时候碰到跨域资源共享问题,CORS(Cross-origin resource sharing)是浏览器的技术规范,浏览器可以发起跨域请求但Javascript脚本不能,传统的ajax只能获取在同域名下的资源,但Html5允许ajax发起跨域请求,解决方案有:JSONP、Flash、IFrame、CORS。 一、CORS(跨域资源共享)问题 针对vue-element-admin的登录模块的后端接口完成后,前端调用时候出现报错,因为前端的端口是9527而后. 阅读详情
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
//#define INPUT
/**
    Problem: poj3740 - Easy Finding
    Begin Time:8:30 p.m. 20th/Mar/2012
    End Time: 8:42 p.m. 21st/Mar/2012
    Last Time: Maybe 4hours-;
    Input:
    Standard output:
    Knowledge point:
    DFS+回溯+剪枝
    State: WA x 1 , TLE x 1  -> AC
    Thought:
    --------------------AC后的总结----------------------
    1.定义一个数组selectedCol,表示目前选出了几列中有"1".
    2.在choose之前,要检查selectedRow[i]是否为true.
      如果是true,这行就选过了,就continue
    3.在每次choose某行的时候,都在choose函数里进行check
    if choose_row[i]  == 1 && selectedCol[i] == 1 return false;
    if choose_row[i] && !selectedCol[i] => selectedCol[i] = 1;
    但是在choose之前记得保存selectedCol的状态,以便return false之前进行回溯。
    4.如果choose失败的话,就要检查是否已经找到了全1,如果找到了
        isFound = true;
        在递归函数里检查isFound = true的话就return true;
    5.如果没找到的话,记得回溯。这就要求在递归函数里每次保存selectedCol的状态,失败了进行回溯。
    6.如果leftRow == 0 ,那么就check,如果check,return true;,否则return false;

    剪枝策略:
        每层递归都是从 i = 0 to rowNum 开始选
        如果上层递归选了i,那就下层递归从i+1开始选。
        因为上层递归从0开始选,选到i的话[0,i]的情况已经由上层递归选完了。
        而且行数跟顺序无关
        比如说
        第一层递归选了1
        那么第二,第三……一直到最后一层递归,肯定是把第一次选1的所有情况都遍历了,
        第一层递归才能去选2
        而且
        1   2   3   4   5   6
        和
        6   5   4   3   2   1
        这么选择是没有区别的,所以下一层递归从ind+1开始就可以了
        加上这个剪枝,653ms就过了。
    更变态的思路:
        由于是0,1我们可以按位表示嘛!然后按照规则算,应该会非常快~
    递归函数定义:
    f(int totalRow,int totalCol,int leftRow,int ind);
    totalRow表示总共有多少行
    totalCol表示列数
    leftRow表示还有几行没选
    int ind表示从现在第几行开始选。
    --------------------AC前的涂鸦----------------------
    其实这道题跟STICK是差不多的,当然,状态压缩是必须的。
    每行压缩成一个数字,然后是否有几个数字相加起来正好等于
    1111111....
    注意,最多可以有10^300,所以这个比较囧!

    每一个状态就是按行i是否被选择来决定,
    选择了某一行之后,就定义tmp[m]对应的列已经被占领。
    那么剩下的就转化为用leftNum - 1行来拼出来其他的列了,如果都能拼出来,那么
    return true,否则return false;
    定义函数f(rowNum,colNum,leftNum);表示总共有rowNum列,有colNum行,剩leftNum没有选
    每次选择的时候定义一个check,看看是否已经选出了每列全有1的行。
    还有一个check2,看看当前选的行是否跟以前的行有冲突。
**/
using namespace std;

int matrix[20][310]; ///开大一点总是没错的
bool selectedCol[310];
bool selectedRow[18];
bool isFound;
bool checked(const int colNum)
{
    for(int i = 0 ; i < colNum ; i++)
    {
        if (!selectedCol[i])
            return false;
    }
    return true;
}
bool choose(const int a[310],int colNum)
{
    int tmp_state[310];
    memset(tmp_state,0,sizeof(tmp_state));
    memcpy(tmp_state,selectedCol,sizeof(tmp_state));
    for(int i = 0 ; i < colNum ; i++)
    {
        if(!selectedCol[i] && a[i] )
        {
            selectedCol[i] = a[i];
        }
        else
        {
            if ( selectedCol[i] && a[i] )
            {
                memcpy(selectedCol,tmp_state,sizeof(tmp_state));
                return false;
            }
        }
    }
    return true;
}
bool Solve(int rowNum,int colNum,int leftNum,int ind)
{
    int tmp_state[310];
    memset(tmp_state,0,sizeof(tmp_state));
    if( isFound )
        return true;
    if (leftNum == 0)
    {
        if ( checked(colNum) )
        {
            isFound = true;
            return true;
        }
        else
        {
            return false;
        }
    }
    for(int i = ind ; i < rowNum ; i++)
    {
        memcpy(tmp_state,selectedCol,sizeof(tmp_state));
        if( isFound ) return true;
        if ( selectedRow[i] ) continue;
        if ( choose(matrix[i],colNum) )
        {
            if( selectedRow[i] != true && !checked(colNum) )
            {
                selectedRow[i] = true;
                Solve(rowNum,colNum,leftNum - 1,i+1);
            }
            else
            {
                if ( checked(colNum) )
                {
                 isFound = true;
                 return true;
                }
            }
       //     memcpy(matrix[i],tmp_state,sizeof(tmp_state));
            memcpy(selectedCol,tmp_state,sizeof(selectedCol));
            selectedRow[i] = false;
        }
      //  selectedRow[i] = false;
    }
    return false;
}
int main()
{
    int n,m;
#ifdef INPUT
    freopen("b:\\acm\\poj3740\\input.txt","r",stdin);
#endif
    while(scanf("%d%d",&m,&n) != EOF )
    {
        isFound = false;
        memset(matrix,0,sizeof(matrix));
        memset(selectedCol,0,sizeof(selectedCol));
        memset(selectedRow,0,sizeof(selectedRow));
        for(int i = 0 ; i < m ; i++)
        {
            for(int j = 0 ; j < n ; j++)
            {
                scanf("%d",&matrix[i][j]);
            }
        }
        if ( Solve(m,n,m,0) )
        {
            printf("Yes, I found it\n");
        }
        else
        {
            printf("It is impossible\n");
        }
    }
    return 0;
}

AI上推荐 之 隐语义模型(LFM)和矩阵分解(MF) 1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协 阅读详情

相关推荐

用数据分析优化彩票决策:放弃预测,专注理性投入

彩票本质上是负和博弈的概率系统,其核心并非号码预测,而是对玩法规则、返奖率(RTP)、投入策略与心理约束的量化决策。基于组合数学与二项分布的分析方法,可精确计算各奖项概率、评估不同玩法的实际回报效率,并构建个人资金-风险-目标模型。数据的价值不在于打破随机性,而在于识别非随机环节——如奖池跃升期的RTP波动、固定奖的保底收益、冷热号背后的分奖博弈结构。这种以决策优化为导向的数据实践,适用于将彩票视为受控实验的理性参与者,而非追求玄学中奖的投机者。

frank1998819 643

POJ-3740-Easy Finding【DLX精确覆盖】

POJ-3740-Easy Finding

Linoy 830

RuoYi(分离版) 使用代码生成器添加子模块(idea版)

文章目录准备一、使用代码生成器1.数据库2.导入表并生成代码二、导入代码文件1.新建一个模块2.导入zip代码文件3.模块环境配置添加菜单和访问地址总结 准备 前提要把系统启动起来,部分教程可以参考这边文章若依框架RuoYi前后端分离项目导入IDEA及运行启动 但是完全参考这篇文章还是不能把项目启动起来,因为这篇文章没有说明数据库。 我是用的是本地数据库,采用xampp+Navicat的组合来部署和访问数据库。打开Navicat,连接并创建数据库ry-vue并导入数据脚本ry_20191008.sql,q

dream_coke的博客 1万+

poj 3740 Easy Finding

题意:给一个01矩阵,问是否能找到一个行的集合,使得集合中每列出现且仅出现一次‘1’。         思路:舞蹈链X算法模版题。来谈谈我对这个算法的理解。。这个算法是一个深搜,但是它的数据结构非常巧妙,是一个循环十字链表,把矩阵内为1的元素建立节点,都链起来,还加上了一个“表头”。每次先选一列没找到‘1’的列,如果没有,则寻找失败;如果有,选择一行,把这行,这行有‘1’的列,与这行有公共列出现

A Cube Master 600

手把手教你用Verilog实现MDIO控制器(附完整VHDL代码对比)

本文详细介绍了如何使用Verilog实现MDIO控制器,并提供了与VHDL实现的深度对比。通过解析MDIO协议核心要点,展示Verilog状态机架构设计和关键时序控制逻辑,同时对比VHDL在信号声明、状态机实现和双向端口处理上的差异。适用于以太网硬件设计开发者,帮助掌握MDIO控制器自主实现能力。

weixin_30682415的博客 422

OpenClaw 3.13 + Mac mini M4 集成 qmd 记忆存储:qmd embed 卡死 / 报错 sqlite-vec 不可用 终极解决教程

模型加速让 qmd 从国内镜像下载模型,避免网络超时;SQLite 扩展支持:修改 qmd 源码后,Bun 不再使用内置 SQLite,而是调用 Homebrew 安装的,该版本支持接口,可正常加载vec0.dylib向量扩展;OpenClaw 3.13 适配:核心逻辑与 OpenClaw 3.13 的 qmd 记忆调用逻辑完全兼容,无需额外调整;sqlite-vec 加载:qmd 自动通过sqlite-vec包获取vec0.dylib路径,调用完成向量扩展加载,实现高效向量搜索。

wuanxionglidui的博客 1304

POJ 3740 Easy Finding(DLX精确覆盖裸题)

POJ 3740 Easy Finding 题目链接 题意:选一些行,要求每行正好覆盖一个列 思路:精确覆盖裸题 代码: #include #include using namespace std; const int MAXNODE = 500010; const int MAXN = 510; const int MAXM = 1010; const i

Remilia's 867

【零基础入门unity游戏开发——2D篇】SpriteEditor图片编辑器

【零基础入门unity游戏开发——2D篇】SpriteEditor图片编辑器

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2330

POJ 3740 Easy Finding(精确覆盖模板题)

题目大意 给定一个M*N的01矩阵,能否找到一个行的集合,使得集合中每一列都恰好包含一个1。

羽歌Yo的博客 244

[RK3568 Android12] 添加自定义启动脚本

1:定义添加的脚本 2:rk3568_s.mk 中定义打包 3:在启动脚本中init.rk356x.rc添加权限及何时启动 4:添加权限文件file_contexts 5:系统确认是否运行

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2220

面向精准医疗的多模态影像融合:实现前列腺MRI与大病理切片的三维配准与空间重建研究

亲爱的同学,当你能完整实现“前列腺MRI与大病理组织学图像的3D配准及体素重建”,你会发现医学影像交叉领域的毕设课题充满挑战与乐趣。我们将从临床需求出发,拆解3D配准与体素重建的核心技术,带你从原理到代码实现完整流程,让你的毕设不仅能顺利完成,更能体现临床应用价值。,让MRI和病理图像在同一空间对齐,能实现“术前影像-术后病理”的精准关联,为前列腺癌的精准诊疗、预后评估提供关键依据——这一课题既有技术挑战性,又有临床意义,是毕设的优质选择。(如NCC、Dice、配准时间),用数据证明方法的优越性。

m0_71589036的博客 4717

POJ3740-Easy Finding

#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long const int INF =

wang_128的博客 329

OD图 arcgis曲线制作插件 od图曲线 路径图曲线制作插件 航线图曲线制作插件

在ArcGIS 10.2 中导入节点数据,打开插件,选择输入起始节点和目标节点的节点文件Point,以Name字段(地名)为连接线的起始字段和目标字段,(Input Table File)选择连接关系表格SDLine.csv,(Origin Column 和 Destination Column)为起始节点和目标节点,(Output Path)为输出路径,应选择.gdb数据库路径,否则容易报错,(Chord Coefficient)为连线的曲率,数值越大,曲率越高。运行环境:ArcGIS10.2。...

JData_Engineer的博客 2670

[ACM] POJ 3740 Easy Finding (DFS)

Easy Finding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16482   Accepted: 4476 Description Given a M×N matrix A. Aij ∈ {0, 1} (0 ≤ i < M, 0 ≤ j < N), co

逆风的方向 更适合飞翔 1351

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

[poj3740]Easy Finding_状态压缩_dfs

Easy Finding poj-3470     题目大意:给你一个01矩阵,问能否选出一些行,使得这些行所新组成的01矩阵每列中有且只有1个1。     注释:1<=行数<=16,1<=列数<=300.       想法:对于一个单独的01矩阵来讲,我们可以用一个数表示其中的每一行,然后暴力枚举每一行选取情况即可。     最后,附上丑陋的代码... ... ...

weixin_30485799的博客 66

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

poj 3740 Easy Finding(Dancing Links)

Easy Finding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15668   Accepted: 4163 Description Given a M×N matrix A. Aij ∈ {0, 1} (0 ≤ i Input There ar

记录成长的点点滴滴. . . . . 1966

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

poj3740 Easy Finding(深搜)

Easy FindingTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 11432 Accepted: 2802DescriptionGiven a M×N matrix A. Aij ∈ {

nvfumayx的专栏 1062

POJ 3740 Easy Finding(舞蹈链)

/* 舞蹈链模板题 */ #include #include const int mMax = 50, nMax = 500; int map[mMax][nMax]; int M, N; struct Node { int left, right, up, down; int col; }node[mMax * nMax];//双向链表 int len; int cnt[nMax];

758

POJ 3740 Easy Finding 跳舞链模板

题目:http://poj.org/problem?id=3740题意:给出一个n∗mn*m的0101矩阵,问能不能够选出来若干行,使每列恰好只有一个11思路:跳舞链模板题。代码中其实把方案记录在ans数组中,要方案的话打印ans数组即可#include <iostream> #include <cstdio> #include <cstring> #include <algorithm>using

弱智就要多努力 352

POJ 3740 Easy Finding 位运算压缩+DFS or Dancing Links

Easy Finding 这道题运用二进制DFS是比较好的方法,当然还可以用dancing links,这个比较高级,先把我看别人的二进制思路然后写的代码贴上来。 当然本题是体现不出DLX的高级之处的。用位运算和DLX的速度应该是相当 /* ID: sdj22251 PROG: calfflac LANG: C++ */ #include #include #include #in

水 966

[ACM] POJ 3740 Easy Finding (DLX模板题)

Easy Finding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16178   Accepted: 4343 Description Given a M×N matrix A. Aij ∈ {0, 1} (0 ≤ i < M, 0 ≤ j < N), co

逆风的方向 更适合飞翔 1675

poj 3740 Easy Finding(Dancing Links 精确覆盖)

Easy Finding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16128   Accepted: 4321 Description Given a M×N matrix A. Aij ∈ {0, 1} (0 ≤ i < M, 0 ≤ j < N), co

WEYuLi的专栏 943

POJ 3740 Easy Finding (DLX)

题意:精确覆盖,DLX模板题思路:这个博客写的不错 刚刚开学DLX,感觉是个很简单的东西,只能算是十字链表优化了DFS,所以理论上有些DLX题目的有些题目应该DFS也能水过去 去看板子,发现所有人的板子都几乎一模一样。。。错误及反思:代码:#include <iostream> #include <stdio.h> #include <string.h>const int MN = 1005;/

Roll_Keyboard的博客 262

POJ 3740 Easy Finding 位运算压缩+DFS

Easy Finding 这道题运用二进制DFS是比较好的方法,当然还可以用dancing links,这个比较高级,先把我看别人的二进制思路然后写的代码贴上来。 /* ID: sdj22251 PROG: calfflac LANG: C++ */ #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;list&gt...

coolsooner 136

POJ-3740(dfs边界点和还原处理)(Easy Finding)

【题目描述】 选出一些行使得这些行构成矩阵的每一列都有且只有一个1。 【接替思路】 直接判断每一行是否选中。 此方法并不高效。 int m, n; int Map[16][300]; bool used[300]; bool Find; bool match()//判断所选取的行是否让每一列都恰好有一个1 { int i; for (i = 0; i < n; ++i) if

famousDT的专栏 836

POJ3740--Easy Finding(Dancing Links)

Description Given a M×N matrix A. Aij ∈ {0, 1} (0 ≤ i Input There are multiple cases ended by EOF. Test case up to 500.The first line of input is M, N (M ≤ 16, N ≤ 300). The next M lines e

SCUT_Pein 664
上一篇: 【HDU2780 - Su-Su-Sudoku】 解题报告+思路+代码,差点一次AC T^T
下一篇: 【ACM模板】HASH表(无删除功能,添查)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值