NOI 2013 书法家
我真是日狗了。。。。。。
果然还是没有耐心读题,搞到读题读错了2个地方,结果调试了半天。。。。。。
言归正传。
动态规划。
这种题目很常见。
我们发现竖着做比较麻烦,那么可以横着做。
打竖将"NOI“分成11种类型。
F[i][j][k][l]表示第i列的涂色部分的上边界为j,下边界为k,类型为l。
然后转移。
从2类型->2类型有点麻烦,我们可以借组一个辅助数组b,见程序注释部分。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<utility>
#include<set>
#include<bitset>
#include<vector>
#include<functional>
#include<deque>
#include<cctype>
#include<climits>
#include<complex>
//#include<bits/stdc++.h>适用于CF,UOJ,但不适用于poj using namespace std; typedef long long LL;
typedef double DB;
typedef pair<int,int> PII;
typedef complex<DB> CP; #define mmst(a,v) memset(a,v,sizeof(a))
#define mmcy(a,b) memcpy(a,b,sizeof(a))
#define re(i,a,b) for(i=a;i<=b;i++)
#define red(i,a,b) for(i=a;i>=b;i--)
#define fi first
#define se second
#define m_p(a,b) make_pair(a,b)
#define SF scanf
#define PF printf
#define two(k) (1<<(k)) template<class T>inline T sqr(T x){return x*x;}
template<class T>inline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}
template<class T>inline void upmax(T &t,T tmp){if(t<tmp)t=tmp;} const DB EPS=1e-;
inline int sgn(DB x){if(abs(x)<EPS)return ;return(x>)?:-;}
const DB Pi=acos(-1.0); inline void clear(vector<int> *A,int a,int b){int i,j;A->clear();re(i,,a)re(j,,b)A[i].push_back();} inline int gint()
{
int res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
}
inline LL gll()
{
LL res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
} const int maxN=;
const int maxM=;
const int INF=; int N,M;
int mp[maxN+][maxM+];
int sum[maxM+][maxN+];
int x,y,F[][maxN+][maxN+][];
int ans; inline int ask(int r,int x,int y){return sum[r][y]-sum[r][x-];} int b[maxN+]; inline void clear(int x){int j,k,l;re(j,,N+)re(k,,N+)re(l,,+) F[x][j][k][l]=-INF;} int main()
{
freopen("penman.in","r",stdin);
freopen("penman.out","w",stdout);
int i,j,k;
N=gint();M=gint();
re(i,,N)re(j,,M)mp[i][j]=gint();
re(i,,M)re(j,,N)sum[i][j]=sum[i][j-]+mp[j][i];
x=;y=;
clear(y);
re(j,,N)re(k,j,N)F[y][j][k][]=ask(,j,k);
ans=-INF;
re(i,,M)
{
int t; swap(x,y);
clear(y); //
re(j,,N)re(k,j,N)
{
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,k));
upmax(F[y][j][k][],ask(i,j,k));
} //
re(j,,N)
{
t=F[x][j][N][];
red(k,N-,j)
{
upmax(F[y][j][k][],t+ask(i,j,k));
upmax(t,F[x][j][k][]);
}
}
/*
(1)
l=j
r=j..k
*/
re(j,,N)
{
t=-INF;
re(k,j,N)
{
upmax(t,F[x][j][k][]);
upmax(F[y][j][k][],t+ask(i,j,k));
}
}
/*
(2)
re(l,1,j-1)
re(r,j-1,k)
F[i-1][l][r][2]
b[r]表示F[i-1][1..j-1][r][2]的最大值,b[r]随着j的递增的递增
求b[j-1...k]的最大值
*/
re(j,,N+)b[j]=-INF;
re(j,,N)
{
t=-INF;
re(k,j-,N)
{
upmax(b[k],F[x][j-][k][]);
upmax(t,b[k]);
if(k>=j) upmax(F[y][j][k][],t+ask(i,j,k));
}
}
/*int l,r;
re(j,1,N)re(k,j,N)re(l,j,j)re(r,j,k)upmax(F[y][j][k][2],F[x][l][r][2]+ask(i,j,k));
re(j,1,N)re(k,j,N)re(l,1,j-1)re(r,j-1,k)upmax(F[y][j][k][2],F[x][l][r][2]+ask(i,j,k));*/ //
re(j,,N)re(k,j,N)upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,k));
re(k,,N)
{
t=F[x][k][k][];
red(j,k-,)
{
upmax(F[y][j][k][],t+ask(i,j,k));
upmax(t,F[x][j][k][]);
}
} //
re(j,,N)re(k,j,N)upmax(F[y][j][k][],F[x][j][k][]);
t=-INF;
re(j,,N)
re(k,j,N)
upmax(t,F[x][j][k][]);
re(j,,N)re(k,j,N)upmax(F[y][j][k][],t); //
re(j,,N)re(k,j+,N)
{
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,k));
} //
re(j,,N)re(k,j+,N)
{
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,j)+ask(i,k,k));
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,j)+ask(i,k,k));
} //
re(j,,N)re(k,j+,N)
{
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,k));
} //
re(j,,N)re(k,j,N)upmax(F[y][j][k][],F[x][j][k][]);
t=-INF;
re(j,,N)re(k,j+,N)upmax(t,F[x][j][k][]);
re(j,,N)re(k,j,N)upmax(F[y][j][k][],t); //
re(j,,N)re(k,j+,N)
{
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,j)+ask(i,k,k));
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,j)+ask(i,k,k));
} //
re(j,,N)re(k,j+,N)
{
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,k));
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,k));
} //
re(j,,N)re(k,j+,N)
{
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,j)+ask(i,k,k));
upmax(F[y][j][k][],F[x][j][k][]+ask(i,j,j)+ask(i,k,k));
upmax(ans,F[y][j][k][]);
} }
cout<<ans<<endl;
return ;
}
NOI 2013 书法家的更多相关文章
- 【BZOJ 3242】【UOJ #126】【CodeVS 3047】【NOI 2013】快餐店
http://www.lydsy.com/JudgeOnline/problem.php?id=3242 http://uoj.ac/problem/126 http://codevs.cn/prob ...
- NOI 2013 矩阵游戏
http://uoj.ac/problem/124 矩阵乘法. 十进制快速幂. 刚开始还傻傻地写二进制快速幂,然后陈老师一语点醒梦中人...... #include<cstdio> #in ...
- 「BZOJ 3242」「NOI 2013」快餐店「基环树」
题意 基环树上找到一个点(可以在边上)使得它到树上最远点的距离最小,输出最小距离 题解 如果是一棵树,答案就是树的直径\(/2\) 如果是基环树,那么很好证明删去环上的某一条边是不影响答案的.于是断环 ...
- CF 329A(Purification-贪心-非DLX)
A. Purification time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...
- SharePoint 2013: A feature with ID has already been installed in this farm
使用Visual Studio 2013创建一个可视web 部件,当右击项目选择"部署"时报错: "Error occurred in deployment step ' ...
- Visual Studio 2013 添加一般应用程序(.ashx)文件到SharePoint项目
默认,在用vs2013开发SharePoint项目时,vs没有提供一般应用程序(.ashx)的项目模板,本文解决此问题. 以管理员身份启动vs2013,创建一个"SharePoint 201 ...
- SharePoint 2013 create workflow by SharePoint Designer 2013
这篇文章主要基于上一篇http://www.cnblogs.com/qindy/p/6242714.html的基础上,create a sample workflow by SharePoint De ...
- Install and Configure SharePoint 2013 Workflow
这篇文章主要briefly introduce the Install and configure SharePoint 2013 Workflow. Microsoft 推出了新的Workflow ...
随机推荐
- How to Read an Engineering Research Paper
How to Read an Engineering Research Paper William G. Griswold Department of Computer Science & E ...
- nova-network
nova network-create demo-net --bridge br100 --multi-host T --fixed-range-v4 192.168.3.0/26 192.168.3 ...
- Apache Ant在Windows下配置环境变量
Windows下ANT用到的环境变量主要有2个: ANT_HOME 和 PATH. 1..设置ANT_HOME指向ant的安装目录,如下: ANT_HOME = D:\soft\apache\apac ...
- Apache Hadoop最佳实践和反模式
摘要:本文介绍了在Apache Hadoop上运行应用程序的最佳实践,实际上,我们引入了网格模式(Grid Pattern)的概念,它和设计模式类似,它代表运行在网格(Grid)上的应用程序的可复用解 ...
- mac显示隐藏文件夹
~/Library/Preferences/com.apple.finder AppleShowAllFiles -bool true (true 改成 false 就可以不再显示隐藏文件)需要重启, ...
- 深入解读ESB与SOA的关系
时至今日,SOA的概念渐渐清晰了. 有关ESB的概念,已经吵了好多年了,还是没有定论. 我个人认为,ESB本来就是抽象的概念,而且内涵丰富,在不同的场合含义不同.因此应该从不同的角度来认识. ...
- SUSE 在Intel举行"Rule The Stack"的竞赛中获得 "Openstack安装最高速"奖
有关"Rule The Stack": https://communities.intel.com/community/itpeernetwork/datastack/blog/2 ...
- Linux学习笔记01:Linux下的drwxr-xr-x
1. drwxr-xr-x 第1字母:表示文件类型 d ------- 表示文件目录(directory) - ------- 表示二进制文件 l ------ ...
- css如何实现背景透明,文字不透明?
之前做了个半透明弹层,但设置背景半透明时,子元素包含的字体及其它元素也都变成了半透明.对opacity这个属性认识的不透彻,在这里做一些总结,方便以后使用. 背景透明,文字不透明的解决方法: ...
- android 自定义view之 TypeArray
在定义view的时候,我们可以使用系统提供的属性,也可以自定义些额外的属性来设置自定义view的样式,这个时候,我们就需要TypeArray,字面意思就是Type 数组. 今天我们就讲讲如何自定义Vi ...