BZOJ 3810 [Coci2015]Stanovi
这讲真就是一篇显得自己认真做题的博客
因为真的比较习惯将培训所有的题都放到一篇博客中,又因为暑假好多培训,所以单题很少,这也是从博客中摘出来的
如果合法,一定有一条贯穿整个矩形的线;
dp[i][j][t]长度为i,宽度为j,面向大海的边的状态是t这样划分最小差异度是啥;、
然后因为一定要贯穿,可以一分为二:dp[i][j][t]=左边+右边;
其中t:
t==1 只有一面环海:
显然如果我们要将其分成两部分,只能:
for(int i=1;i<n;i++) ans=min(ans,work(i,m,1)+work(n-i,m,1));
return f[n][m][t]=ans;
t2 && t4 有2面环海:
t==2:
如果要分成两部分的话,可以横着分,也可以竖着分:
for(int i=1;i<n;i++) ans=min(ans,work(i,m,2)+work(n-i,m,1));//竖着分?
for(int i=1;i<m;i++) ans=min(ans,work(n,i,2)+work(m-i,n,1));//横着分?
t==4:
同样可以横着分和竖着分:
for(int i=1;i<n;i++) ans=min(ans,work(i,m,4)+work(n-i,m,4));
for(int i=1;i<m;i++) ans=min(ans,work(n,i,1)+work(n,m-i,1));
t==3:三面环海:
同样有两种划分方法:
for(int i=1;i<n;i++) ans=min(ans,work(i,m,3)+work(n-i,m,4));
for(int i=1;i<m;i++) ans=min(ans,work(n,i,2)+work(n,m-i,2));
CODE:
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
inline int read(){
int ans=0;
char last=' ',ch=getchar();
while(ch>'9'||ch<'0') last=ch,ch=getchar();
while(ch>='0'&&ch<='9') ans=(ans<<1)+(ans<<3)+ch-'0',ch=getchar();
if(last=='-') ans=-ans;
return ans;
}
int n,m,k;
ll ans;
ll f[310][310][5];
ll hs(int x,int y,int t){
if(f[x][y][t]!=-1) return f[x][y][t];
ll ans=((ll)x*y-k)*((ll)x*y-k);
if(t==1){
for(int i=1;i<x;i++) ans=min(ans,hs(i,y,1)+hs(x-i,y,1));
return f[x][y][t]=ans;
}
if(t==3){
for(int i=1;i<x;i++) ans=min(ans,hs(i,y,3)+hs(x-i,y,2));
for(int i=1;i<y;i++) ans=min(ans,hs(x,i,4)+hs(x,y-i,4));
return f[x][y][t]=ans;
}
if(t==2){
for(int i=1;i<x;i++) ans=min(ans,hs(i,y,2)+hs(x-i,y,2));
for(int i=1;i<y;i++) ans=min(ans,hs(x,i,1)+hs(x,y-i,1));
return f[x][y][t]=ans;
}
if(t==4){
for(int i=1;i<x;i++) ans=min(ans,hs(i,y,4)+hs(x-i,y,1));
for(int i=1;i<y;i++) ans=min(ans,hs(x,i,4)+hs(y-i,x,1));
return f[x][y][t]=ans;
}
}
int main(){
n=read();
m=read();
k=read();
memset(f,-1,sizeof(f));
ans=1e18;
for(int i=1;i<n;i++) ans=min(ans,hs(i,m,3)+hs(n-i,m,3));
for(int i=1;i<m;i++) ans=min(ans,hs(m-i,n,3)+hs(i,n,3));
printf("%lld",ans);
return 0;
}
BZOJ 3810 [Coci2015]Stanovi的更多相关文章
- BZOJ3810: [Coci2015]Stanovi
3810: [Coci2015]Stanovi Description Input 输入一行,三个整数,n, m, k Output 输出一个数,表示最小不满意度. Sample Input ...
- BZOJ 3881: [Coci2015]Divljak [AC自动机 树链的并]
3881: [Coci2015]Divljak 题意:添加新文本串,询问某个模式串在多少种文本串里出现过 模式串建AC自动机,考虑添加一个文本串,走到的节点记录下来求树链的并 方法是按dfs序排序去重 ...
- BZOJ 3881: [Coci2015]Divljak
3881: [Coci2015]Divljak Time Limit: 20 Sec Memory Limit: 768 MBSubmit: 553 Solved: 176[Submit][Sta ...
- bzoj 3745: [Coci2015]Norma
Description Solution 考虑分治: 我们要统计跨越 \(mid\) 的区间的贡献 分最大值和最小值所在位置进行讨论: 设左边枚举到了 \(i\),左边 \([i,mid]\) 的最大 ...
- BZOJ 3745: [Coci2015]Norma(分治)
题意 给定一个正整数序列 \(a_1, a_2, \cdots, a_n\) ,求 \[ \sum_{i=1}^{n} \sum_{j=i}^{n} (j - i + 1) \min(a_i,a_{i ...
- 【刷题】BZOJ 3745 [Coci2015]Norma
Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. Sample Input 4 2 4 1 4 Sam ...
- bzoj3810: [Coci2015]Stanovi(记忆化搜索)
实际上切出来的矩阵在原矩阵上的位置是不重要的...重要的只有矩阵的大小和上下左右是否在边界上. 于是我们可以设f[x][y][l][r][u][d]表示x*y的矩阵上下左右是不是边界的最小代价. 记忆 ...
- bzoj 3881: [Coci2015]Divljak AC自动机
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3881 题解: 这道题我想出了三种做法,不过只有最后一种能过. 第一种: 首先我们把所有的 ...
- bzoj 3881 [Coci2015]Divljak fail树+树链的并
题目大意 Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操作有两种形式: "1 P",Bob往自己的集合里添 ...
随机推荐
- CPC/CPM/CPA/CPS定义
CPC 每点击次数计费 CPM 每千人次展现计费 CPA 每行动成果计费(比如推广成功一个用户) CPS 淘宝客类型,按照商品佣金,推广成功计费
- U盘安装linux(CentOS Kali ubuntu)无法挂载_实测
最新的Kali linux官方下载地址: https://www.kali.org/downloads/ 刻录软件官网:http://rufus.ie/ 1.打开. 2.插入U盘. 3.自动下载插件. ...
- mongodb切片配置方法
---------------------------------切片架构图-------------------------------------------------------------- ...
- 对html2canvas的研究
介绍 该脚本允许您直接在用户浏览器上截取网页或部分网页的“屏幕截图”.屏幕截图基于DOM,因此它可能不是真实表示的100%准确,因为它没有制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图. 这 ...
- 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋
题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...
- java.lang.IllegalArgumentException: java.io.IOException: Alias name [tomcat] does not identify a key entry
java.lang.IllegalArgumentException: java.io.IOException: Alias name [tomcat] does not identify a key ...
- UVa 1601 || POJ 3523 The Morning after Halloween (BFS || 双向BFS && 降维 && 状压)
题意 :w*h(w,h≤16)网格上有n(n≤3)个小写字母(代表鬼).要求把它们分别移动到对应的大写字母里.每步可以有多个鬼同时移动(均为往上下左右4个方向之一移动),但每步结束之后任何两个鬼不能占 ...
- ModelSerializer 使用知识点_序列化和反序列化用法区别
1.ModelSerializer 如下 from api_test.errorCode.errorCode import Statusclass RelatedbSerializer(serial ...
- 用命令行编译运行java文件的乱码问题
之前在写的时候没有遇到过这个问题,用惯了eclipse之后突然用Notepad++就出现乱码了 我在编写的时候 指定Noepad++的编码是 UTF-8编码,然后进入命令行,编译的时候就出现了乱码 然 ...
- C/C++题库
1.下面的代码输出什么?为什么? void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6)?puts(“>6”):puts(“ ...