题目:http://acm.hdu.edu.cn/showproblem.php?pid=1838

这题也挺不错的。首先题目说了,棋盘的右下角一定是'1',另外棋盘里面至少包含一个1,所以最小值是1,然后初始化,刚开始想错了,以为只tu[1][j]=='1'||tu[j][1]=='1'时,

dp[1][i]与dp[i][1]才初始化为1,这样是错误的,具体请看代码红色部分,不解释了,直接意会不可言传啊。之后再补一遍吧。

转移方程:

 if(tu[i][j]!=tu[i-1][j]&&tu[i][j]!=tu[i][j-1]&&tu[i][j]==tu[i-1][j-1])
dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1;
else dp[i][j]=1;


#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#define inf 0x3f3f3f3f
typedef __int64 ll;
using namespace std;
int n,dp[][];
char tu[][];
int main()
{
int T,cnt,maxx;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%s",tu[i]+);
}
memset(dp,,sizeof(dp));
for(int i=; i<=n; i++)
{
dp[][i]=;
dp[i][]=;
}
maxx=;
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
if(tu[i][j]!=tu[i-][j]&&tu[i][j]!=tu[i][j-]&&tu[i][j]==tu[i-][j-])
dp[i][j]=min(dp[i-][j-],min(dp[i-][j],dp[i][j-]))+;
else dp[i][j]=;
if(tu[i][j]=='1')
{
maxx=max(maxx,dp[i][j]);
}
}
}
cnt=;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
if(dp[i][j]==maxx&&tu[i][j]=='')
cnt++;
}
printf("%d %d\n",maxx,cnt);
}
return ;
}

HDU1838:Chessboard(线性dp)的更多相关文章

  1. 动态规划——线性dp

    我们在解决一些线性区间上的最优化问题的时候,往往也能够利用到动态规划的思想,这种问题可以叫做线性dp.在这篇文章中,我们将讨论有关线性dp的一些问题. 在有关线性dp问题中,有着几个比较经典而基础的模 ...

  2. LightOJ1044 Palindrome Partitioning(区间DP+线性DP)

    问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...

  3. Codeforces 176B (线性DP+字符串)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28214 题目大意:源串有如下变形:每次将串切为两半,位置颠倒形成 ...

  4. hdu1712 线性dp

    //Accepted 400 KB 109 ms //dp线性 //dp[i][j]=max(dp[i-1][k]+a[i][j-k]) //在前i门课上花j天得到的最大分数,等于max(在前i-1门 ...

  5. POJ 2479-Maximum sum(线性dp)

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33918   Accepted: 10504 Des ...

  6. poj 1050 To the Max(线性dp)

    题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...

  7. nyoj44 子串和 线性DP

    线性DP经典题. dp[i]表示以i为结尾最大连续和,状态转移方程dp[i] = max (a[i] , dp[i - 1] + a[i]) AC代码: #include<cstdio> ...

  8. 『最大M子段和 线性DP』

    最大M子段和(51nod 1052) Description N个整数组成的序列a[1],a[2],a[3],-,a[n],将这N个数划分为互不相交的M个子段,并且这M个子段的和是最大的.如果M &g ...

  9. 『最长等差数列 线性DP』

    最长等差数列(51nod 1055) Description N个不同的正整数,找出由这些数组成的最长的等差数列. 例如:1 3 5 6 8 9 10 12 13 14 等差子数列包括(仅包括两项的不 ...

  10. cf909C 线性dp+滚动数组好题!

    一开始一直以为是区间dp.. /* f下面必须有一个s 其余的s可以和任意f进行匹配 所以用线性dp来做 先预处理一下: fffssfsfs==>3 0 1 1 dp[i][j] 表示第i行缩进 ...

随机推荐

  1. love2d教程33--window模块

    --love的window模块比较简单,直接贴代码了function love.load() io.stdout:setvbuf("no") -- 设置io为无缓存模式 --获取显 ...

  2. 一种480 MHz无线数传模块的设计

    一种480 MHz无线数传模块的设计 来源:电子技术应用2012年第6期 作者:严 冬,黄 聃,王 平,彭 杰,朱柏寒2012/8/13 16:56:32 关键词: 微处理器|微控制器 物联网 RF  ...

  3. 安装 RabbitMQ (WINDOWS)

    基础知识: RabbitMQ 是一个开源的MQ,使用  Erlang 写成. MQ 全称是Message Queue (消息队列), 是一种应用程序对应用程序的通信方法.通过消息队列,应用程序之间可以 ...

  4. windows下使用c++调用redis

    不废话,unix下c++调用 redis可以看这个: http://blog.csdn.net/youngqj/article/details/8266177 ==================== ...

  5. java程序调用kettle

    (1).将相应的kettle的jar包导入的java项目,主要的jar包有一下几个. (2).java程序. package cn.com.taiji.oosweb.test.web; import ...

  6. 远程sql 同步程序

    exec sp_configure 'show advanced options',1reconfigureexec sp_configure 'Ad Hoc Distributed Queries' ...

  7. C++ 类的多态三(多态的原理--虚函数指针--子类虚函数指针初始化)

    //多态的原理--虚函数指针--子类虚函数指针初始化 #include<iostream> using namespace std; /* 多态的实现原理(有自己猜想部分) 基础知识: 类 ...

  8. 第二百二十五节,jQuery EasyUI,PropertyGird(属性表格)组件

    jQuery EasyUI,PropertyGird(属性表格)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 PropertyGird(属性表格)组件的 ...

  9. org.springframework.beans.factory.parsing.BeanDefinitionParsingException

    今天在练习spring aop时.调试程序出现下面错误 org.springframework.beans.factory.parsing.BeanDefinitionParsingException ...

  10. PHP 程序员面试常问的问题

    1. Include 与 require的区别,require和require_once的效率哪个高? Php在遇到include时就解释一次,如果页面中出现10次include,php就解释10次, ...