【COCI2015】【BZOJ3810】Stanovi

原创 2016年05月03日 16:04:54

Description
这里写图片描述

Input

输入一行,三个整数,n, m, k
Output

输出一个数,表示最小不满意度。
Sample Input

3 3 2
Sample Output

1

【Hint】

见描述中的左图的分割方案,最小不满意度为4 * (2 - 2) ^ 2 + (1 - 2) ^ 2 = 1。

【数据范围】

n, m <= 300

k <= 10000

HINT

Source

鸣谢 Dzy

直接记忆化搜索.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
#define GET (ch>='0'&&ch<='9')
using namespace std;
const LL MAXLL=1ll<<62;
template<class classname>
inline void in(classname &x)
{
    char ch=getchar();x=0;
    while (!GET)    ch=getchar();
    while (GET) x=x*10+ch-'0',ch=getchar();
}
int n,m,k;
LL f[310][310][2][2][2][2];
LL dfs(int x,int y,int a,int b,int c,int d)
{
    LL ret=1ll*(x*y-k)*(x*y-k);int na,nb,nc,nd;
    if (x>y) swap(x,y),na=a,nb=b,nc=c,nd=d,a=nb,b=nc,c=nd,d=na;
    if (a>c) swap(a,c);
    if (b>d) swap(b,d);
    if (f[x][y][a][b][c][d]!=-1)    return f[x][y][a][b][c][d];
    if (!a&&!b&&!c&&!d) return f[x][y][a][b][c][d]=MAXLL;
    if (a+b+c>0&&a+d+c>0) for (int i=1;i<x;i++)    ret=min(ret,dfs(i,y,a,b,c,0)+dfs(x-i,y,a,0,c,d));
    if (a+b+d>0&&b+c+d>0) for (int i=1;i<y;i++)    ret=min(ret,dfs(x,i,a,b,0,d)+dfs(x,y-i,0,b,c,d));
    return f[x][y][a][b][c][d]=ret;
}
int main()
{
    in(n);in(m);in(k);memset(f,-1,sizeof(f));
    cout<<dfs(n,m,1,1,1,1)<<endl;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CreationAugust/article/details/51305476

bzoj3810: [Coci2015]Stanovi 记忆化搜索

膜拜了网上神犇的题解,得知是记忆化搜索之后感觉整个题就傻逼了。 然而我作死得把大数组开在前面,然后就被卡常数了(这种卡常还真是233333)。 主要思路就是一个矩形房间可以分为多个小矩形,然后递归...
  • IED98
  • IED98
  • 2015-07-12 20:46:55
  • 815

[DP] BZOJ 3810 [Coci2015]Stanovi

首先有个结论就是 如果每个矩形都要挨着边界 那么必然可以把整块切成两部分 然后无脑DP就好了 就是卡卡常 后四维分别表示四边是不是邻着边界#include #include #include #...
  • u014609452
  • u014609452
  • 2017-03-18 20:15:28
  • 284

3810: [Coci2015]Stanovi

3810: [Coci2015]Stanovi Time Limit: 15 Sec  Memory Limit: 64 MB Submit: 650  Solved: 302 [Submit]...
  • CRZbulabula
  • CRZbulabula
  • 2017-04-07 08:44:58
  • 283

[Coci2015]Stanovi解题报告

结论:一个合法的分割方案必然导致矩形(a,b)可以被一条直线分成两半,且不存在一个内部小矩形的边界是跨过这条直线的。 这是为什么呢?因为每个小矩形的边界必然是从大矩形的边界中出来的,而如果我们阻止它...
  • TA201314
  • TA201314
  • 2016-03-22 10:39:33
  • 842

[DP] [BZOJ3810] [Coci2015]Stanovi

Input 输入一行,三个整数,n, m, kOutput 输出一个数,表示最小不满意度。Sample Input 3 3 2Sample Output 1【Hint】见描述中的左图的分割方案...
  • qq_35802962
  • qq_35802962
  • 2017-10-11 00:03:42
  • 110

BZOJ3810 [Coci2015]Stanovi

看了题还以为是什么牛逼的构造,然后搜了发题解结果是记忆化搜索…… f[n][m][u][d][l][r]表示n行m列,上下左右分别是否面向大海,春暖花开 考虑分割成两个矩形,对于任意一种分割方...
  • neither_nor
  • neither_nor
  • 2017-03-22 07:29:42
  • 489

bzoj3810[Coci2015]Stanovi 记忆化搜索

一开始没想到,不过这题模型不是很明显。。估计我也想不出来= = 设f[x][y][a][b][c][d]表示当前分割长度为x,宽为y的矩形,a,b,c,d表示是否与四边接触,核心转移就是把一个矩形分...
  • qq_35866453
  • qq_35866453
  • 2017-07-22 09:37:51
  • 115

3810: [Coci2015]Stanovi 记忆化搜索

首先观察性质:对于一个合法的方案,总能将矩形分成两部分。 否则总会有四面均不接触边界的矩形。 那么我们用fn,m,u,d,l,rf_{n,m,u,d,l,r}表示n×mn\times m的矩形,四...
  • Phenix_2015
  • Phenix_2015
  • 2016-05-21 22:45:52
  • 614

BZOJ 3810: [Coci2015]Stanovi

搜索+优化….
  • cgh_Andy
  • cgh_Andy
  • 2017-07-11 09:50:02
  • 150

BZOJ P3810[Coci2015]Stanovi

记忆化搜索 表示长为n,宽为m的矩形,上下左右是否接触边界时,最小的值 下面是代码,没有WA算我输 #include #include #include #include #include us...
  • mdnd1234
  • mdnd1234
  • 2017-03-18 15:07:06
  • 148
收藏助手
不良信息举报
您举报文章:【COCI2015】【BZOJ3810】Stanovi
举报原因:
原因补充:

(最多只允许输入30个字)