//LA 4794 状压dp
//据说是当年2010年全球总决赛最简单的一道题目
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
#include<stdio.h>
#include<stdlib.h>
#include<istream>
#include<vector>
#include<math.h>
#include<stack>
#include<string.h>
#include<algorithm>
#define mod 10000009
#define maxn 10001
#define long long ll
using namespace std;
int a[1<<15+1],b[20],n,dp[102][1<<15+1],vis[102][1<<15+1]; //dp第一维表示最短的宽,第二维表示面积状态,一般会表示为三维,长,宽,面积,但复杂度会超标,因此采用如上方式,但要注意的是,如上方式判定最后一块面积时要在最后加一个条件。
int bitcount(int x)
{
int i,f=0;
for(i=0;i<n;i++)
{
int t=1<<i;
if((x&t)!=0)
f++;
}
return f;
}
int dfs(int l, int sta)
{
int i, j;
if(vis[l][sta])
return dp[l][sta];
vis[l][sta]=true;
if(bitcount(sta)==1)
return dp[l][sta]=1;
for (i = 1;i < sta;i++)
{
if ((i&sta) == i)
{
if (a[i] % l == 0)
{
if (dfs(min(l,(a[sta]-a[i])/l),sta-i) && dfs(min(a[i]/l,l),i))
{
return dp[l][sta]=1;
}
}
if (a[i] % ( a[sta] / l) == 0)
{
int ll = a[sta] / l;
if (dfs(min(ll, (a[sta] - a[i]) / ll), sta - i) && dfs(min(a[i] / ll, ll), i))
{
return dp[l][sta]=1;
}
}
}
}
return dp[l][sta]=0;
}
int main()
{
//freopen("d:\\in.txt", "r", stdin);
int cnt=0;
while (~scanf("%d", &n) && n != 0)
{
cnt++;
int i,x,y;
memset(a,0,sizeof(a));
memset(vis,false,sizeof(vis));
scanf("%d%d", &x, &y);
for (i = 1;i <= n;i++)
scanf("%d", &b[i]);
int t,all;
all = 1 << n;
all--;
for (i = 1;i <= all;i++)
{
int sum = 0;
for (int j = 0;j < n;j++)
{
int tem = 1 << j;
if ((i&tem) != 0)
a[i] += b[j + 1];
}
}
if (x > y)
t = dfs(y, all);
else
t = dfs(x, all);
if(a[all]!=x*y||a[all]%x!=0) //这里要注意一下,假如是 面积4*4,分割为8,会误认为可以,因为最后一步只考虑了是否为一块。
{
printf("Case %d: No\n", cnt);
continue;
}
if (t != 0)
printf("Case %d: Yes\n", cnt);
else
printf("Case %d: No\n", cnt);
}
return 0;
}相关推荐
Python 批量处理大量压缩包|递归嵌套解压 zip rar 7z tar,文件名乱码修复,扫描残留压缩包工具
在收集大量计算机源码时,经常遇到海量多层嵌套压缩包:zip、rar、7z、tar、tar‑gz 混杂,老压缩包中文文件名 GBK 编码解压出现乱码,解压完成后不确定目录内是否还有遗留未解压的压缩包。 本工具集由 3 份 Python 脚本组成,专门针对大批量源码文件夹做自动化预处理,不用手动一个个解压,自动递归遍历所有子目录,处理嵌套压缩包,修复中文文件名乱码,扫描校验残留压缩包,输出完整处理日志。 前置条件 - Python3.8 及以上环境 - 如果要处理 rar/7z 格式:电脑安装 **7‑Zip**,记录 7z.exe 的完整路径,填到 `jieyarar.py` 配置区。 1. 修改每个脚本顶部配置区:`SCAN_ROOT / TARGET_FOLDER` 修改为你存放文件的根目录绝对路径(Windows 路径字符串前面加 r,例如 `r"F:\files\download"`) 2. 第一步:运行 `main.py`,优先处理全部 zip 压缩包,执行完成查看生成的 `unzip_log.txt` 日志; 3. 第二步:运行 `jieyarar.py`,处理 rar、7z、tar 等其它格式压缩包,查看 `unpack_all_archive_log.txt`; 4. 第三步:运行 `checkfiel.py`,全盘扫描校验,输出 `scan_archive_and_badname.txt`; - 查看报告:确认是否还有残留压缩包、是否存在乱码文件名; 5. 根据日志,手动单独处理加密、损坏的压缩包。
LA - 4794 - Sharing Chocolate(状态压缩dp)
题意:能否把一块面积为x*y的巧克力分成面积分别为a1, a2, a3, ..., an的小块巧克力。 题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2795 ——>>集合上的动态规划~~好喜欢~~设d[S][x]为把面积为x
三相直流无刷电机(带HALL传感器)BLDC控制一
本案例选择TIM0的CH0/CH1/CH2三个通道接入三路原始hall输出信号。三路TIM_CHx(48)通过配置存入到NIP寄存器(new input pattern,3 bits)内。未完待续。
LA_4794 Sharing Chocolate( 狀態壓縮DP )
題意: 給你一塊n*m面積的矩形,每次只切割只能橫着切或者是豎着切,問能不能切割成指定的面積的集合 分析: 如果使用沒有優化的DP,比較容易想到如下: 狀態:f[r][c][S],表示面積爲r*c的矩形能否切割成面積的集合S 狀態轉移: f[r][c][S] = 1, 當且緊當:f[r0][c][SR0] = f[r-r0][c][S^SR0] = 1 or f[r][c0][SC0] = f[r
国产数据库PolarDB-X实战:5分钟快速搭建本地开发环境(附Docker一键部署脚本)
本文提供了一份详尽的国产分布式数据库PolarDB-X本地开发环境搭建指南。通过Docker Compose一键部署脚本,开发者可在5分钟内快速启动一个功能完整的PolarDB-X实例,涵盖环境准备、脚本解析、连接验证及日常维护,极大简化了国产数据库的入门和体验流程。
手把手教你学GPU的KMD专栏--2.4 GPU固件加载与初始化流程
GPU固件(Firmware)是嵌入在GPU芯片ROM或EEPROM中的低级代码,是GPU启动时首先执行的程序。它负责GPU硬件的基础初始化和基本功能配置,是GPU与操作系统之间的"第一道桥梁"。与操作系统驱动不同,固件在CPU启动后、操作系统加载前就已执行,是硬件层面的"启动代码"。关键认知:GPU固件是GPU的"BIOS",没有它,GPU硬件无法进入可操作状态。就像CPU需要BIOS来初始化内存和外设一样,GPU需要固件来初始化其核心组件。
动态规划部分题目小结
UVA10635 LCS转LIS http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=19053 两个长度为p+1和q+1的序列A,B,序列中元素互不相同,且都是1到n^2的整数,求AB的LCS,将A中元素变为1到p+1,B中不在A中的元素直接删掉,问题转换为在B中求LIS 复杂度nlogn。 #include using namespa
[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341)
[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341) Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。Drupal在某些情况下,通过文件模块或者子系统上传恶意文件触发XSS漏洞。
LA 4794 Sharing Chocolate 状压dp--个人的理解+带注释代码
原题:https://vjudge.net/problem/UVALive-4794 题意: 给你一个a*b的巧克力块,问能不能分为面积分别为 a1,a2……an 的巧克力块(n<=15),每次操作只能横着切或者竖着切,不能切一半不切一半。 首先看数据量,n<=15,这么特殊的数据量很容易让人想到状态压缩dp。 我们将需要得到的小巧克力面积用一个二进制保存起来,同时定义...
白话FOC控制中各环节的参数的意义与如何设置参数
FOC参数整定是控制系统的关键环节,如同驯马需要调节"智能马鞍"。核心参数分为三类:电流环参数(P/I/D)决定响应速度和稳定性,速度环参数需慢于电流环5-10倍带宽,系统参数(极对数、电阻等)是电机固有属性必须准确设置。调参心法:由内而外先调电流环,遵循先P后I慎用D原则,内环带宽必须大于外环。利用自动辨识工具,通过听觉(滋滋声表示P过大)和波形观察来微调,最终实现精准控制。
RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)
RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)
dp 专题系列(二):LA3983 Robotruck,LA4794 Sharing Chocolate,LA4394 String Painter,LA4327 Parade,Uva 10817
这几天做的多校联合状态很不好,而且多校的题目数据也略坑爹(居然赛后知道有输出文件为空的数据。。。。)。。。 说说这几天做的dp题目吧。。。 dp感觉是越来越切不动了,各种状态不会想。。。 (一):Live Archive 3983 先说说这个Robotruck这题吧,题目还是很好的,状态还是比较好想的(但我就是没转移出来。。蒟蒻啊) 状态:dp[i] 表示第
PyTorch 面试题及详细答案120题(54-70)-- 模型训练与评估
本文介绍了PyTorch模型训练的基本流程和核心概念。主要内容包括: 模型训练基本流程:通过代码示例展示了数据准备、模型定义、损失函数和优化器选择、训练循环(前向传播、反向传播、参数更新)的完整过程,并包含验证集评估的实现。 训练过程中的关键概念: Epoch:完整遍历一次训练集 Batch:将数据分成小批次 Iteration:一个Batch的参数更新过程 三者关系:1 Epoch = N/B Batch = N/B Iteration(N为样本数,B为batch_size) PyTorch数据加载机制:
LA4794 Sharing Chocolate
看到数据范围就是状压嘛,,本来觉得复杂度x*3^n太高了会炸结果就是那样。然后发现自己忽略了很多状态是不合法的不会被转移到,所以推荐使用记忆化搜索。然后注意一下,还是输出的时候,特判了之后要么return要么另外输出的时候加else 一个else没看到花了20min,简直了。
LOFIC / 全局快门在移动端的可行性:曝光容限、读出噪声与算力预算
手机端引入 LOFIC 与全局快门的核心权衡在于:在有限像素面积与功耗下,如何换取更高的动态范围与运动场景鲁棒性。LOFIC 通过侧向溢流到积分电容扩大满井并保持较高转换增益,全局快门在帧内一次性采样消除行时序伪影,但需付出像素填充率、读出噪声与片上存储功耗的代价。本文以工程可实操为目标,给出像素与读出链的简化模型、曝光损益测算、数据率与带宽估算、端到端算力与热预算方法,配套寄存器配置流程、帧内/帧间切换策略与验证清单,帮助在真实移动 SoC 与 ISP 约束下完成可行性评估与原型落地。
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
LA 4794 状态DP+子集枚举
状态压缩DP,把切割出的面积做状态压缩,统计出某状态下面积和。 设f(x,y,S)为在状态为S下在矩形x,y是否存在可能划分出S包含的面积。若S0是S的子集,对矩形x,y横切中竖切,对竖切若f(x,k,S0)且f(x,y-k,S^S0)为真,则为真,对横切同样。 然后枚举S的子集即可。可以用记忆化搜索。 #include <iostream> #include <cs...
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
LA 4794 Sharing Chocolate (状压DP)
题意:给你一块x * y的巧克力问是否经过若干次切割后能分成面积为a1,a2,....an的巧克力 思路:因为n很小,所以可以状态压缩,设dp[S][i]当宽为i的时候是否能分成集合为S的巧克力,因为宽度确定了的话,那么长度也就一定确定了,再者就是保证S集合的巧克力面积总和要可以整除i。这里还需要运用到一个枚举子集的技巧,这样才能高效枚举子集。 #include #includ
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
LA 4794 Sharing Chocolate(状压DP)
题意:给出一个长宽确定的矩形,每次可以沿一条直线把它分割成两块长宽都为整数的矩形,问能否通过多次操作得到n块面积分别为a1,a2...an的矩形。 分析:《训练指南》P75。 代码: #include<bits/stdc++.h> using namespace std; const int maxn = 16; const int maxw = 100 + 10; int ...
la 4794 分享巧克力 dfs(超时) dp
我开始试着用dfs,结果超时,附代码。 /* la 4794 */ #include #include #include #define N 100+10 using namespace std; struct node { int x; int y; int area; }; node a[N];//存中间块 int b[N];//存目标面积 int x,y,n; int mi
LA 4794 Sharing Chocolate
大白书中的题感觉一般都比较难,能理解书上代码就已经很不错了 按照经验,一般数据较小的题目,都有可能是用状态压缩来解决的 题意:问一个面积为x×y的巧克力,能否切若干刀,将其切成n块面积为A1,A2,,,An块巧克力。(每次只能沿直线切一块巧克力) 设计状态: f(r, c, S) = 1表示r行c列的巧克力可以切成面积集合为S的若干块巧克力 分解问题: f(r, c, S) = 1当且...
LA 4794 状压dp - 把矩形蛋糕分成若干固定面积的矩形块
题目大意: 思路:这里分的时候是把集合分成两个,并且把这个矩阵块分成两个。分别等于这两个集合的矩阵和,当一个集合只有一个元素,那么就满足条件了。 #include <bits/stdc++.h> #define LL long long using namespace std; int a[20]; int d[1<<20][150], sum[1<<20]...
动态规划,记忆化搜索(分享巧克力,LA 4794)
能想到是那种枚举子集的动态规划,结果写着写着成了模拟了= =。 S是位向量,代表着巧克力的集合。 dp[S]是一个vector,里面装着巧克力集合S能拼出的长方形。模拟转移方程就是枚举S的子集S0,S1,然后拼出一个长方形,然后排序去重。。。果断超时。 其实这种O不OK的问题,状态转移方程都是一旦有一种决策OK,那就OK。 问题在于状态是啥,转移方程是啥。 很容易想到dp[S
LA4794 分享巧克力
Sharing Chocolate Chocolate in its many forms is enjoyed by millions of people around the world every day. It is a truly universal candy available in virtually every country around the world. Y...
白书动态规划例题和习题简解
Pre言: 本文的题解原题均来源于白书,题号: UVa 10859, 11825, 11584, 10534, 11552, 11404, 11795, 10564. LA 3983, 4794, 4256, 4731, 4727, 2038, 4394, 4015. 一直觉得自己的基础DP不是很扎实,所以就花了一节晚自习+半个上午的时间阅读和解决了上述大部分题目,少数几道习题查了题解之后...
1592



被折叠的 条评论
为什么被折叠?



