题目如下:

Input:

4
2 3
.*.
***
2 3
.*.
**.
4 5
.***.
*****
*****
*.*.*
5 7
..*.*..
.*****.
*******
.*****.
..*.*..

Output:

5
3
23
34


思路:
看出来这是DP就好解决了
首先观察到当一个位置为 * 时必然圣诞树数量至少为一,想让此点向下形成圣诞树,其下方、左下方、右下方都必须也是 *,只要这三个位置有一个不是 * ,那么就不会继续向下生成圣诞树了。也就是说:

dp[i][j]=min(dp[i+1][j-1],min(dp[i+1][j],dp[i+1][j+1]))+1;
//要+1是因为要加上自身这一个*行程的圣诞树

由此,我们倒着分析这张图,一层层去向上推进dp[i][j]的数值
以最后一个样例为例,可以写出dp图为:

总数把这些加起来即可!

分析结束,开始实操:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
char mp[600][600];
int dp[600][600];
using namespace std;
int main()
{int t;cin>>t;while(t--){int n,m;cin>>n>>m;int ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>mp[i][j];if(mp[i][j]=='*'){dp[i][j]++;//先把*标记出来}}}for(int i=n-1;i>=1;i--)//从图的右下角开始{for(int j=m-1;j>=2;j--)//图的边线位置的*必然只能产生一种圣诞树(也就是他本身,因为他没办法向下生成圣诞树){if(mp[i][j]=='.')dp[i][j]=0;elsedp[i][j]=min(dp[i+1][j-1],min(dp[i+1][j],dp[i+1][j+1]))+1;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){ans+=dp[i][j];//加起来//cout<<dp[i][j]<<' ';}//cout<<endl;}cout<<ans<<endl;memset(dp,0,sizeof(dp));//不要忘记清零}return 0;
}

写了这么久代码,每天找水题找找自信。。。

CF #689(Div. 2) B - Find the Spruce相关推荐

  1. CF #366(div.2) C 模拟,思维

    CF #366(div.2)  C.  Thor 题意:一个手机n个联系人,有q个操作.每次给出ty和ai,如ty==1,表示收到ai的一条信息:如ty==2,表示将ai发的信息都看掉:如ty==3, ...

  2. CF #371 (Div. 2) C、map标记

    1.CF #371 (Div. 2)   C. Sonya and Queries  map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...

  3. cf #823 Div.2(A~C)

    Cf #823 Div.2 文章目录 Cf #823 Div.2 [A. Planets](https://codeforces.com/contest/1730/problem/A) [B. Mee ...

  4. cf #818 Div.2(A~C)

    Cf #818 Div.2 文章目录 Cf #818 Div.2 [A. Madoka and Strange Thoughts](https://codeforces.com/contest/171 ...

  5. CF #683 div.2

    CF #683 div.2 目前 ABCD A. Add Candies B. Numbers Box C. Knapsack D. Catching Cheaters 结尾 A. Add Candi ...

  6. CF#764(div.3A~D)dp进阶

    CF#764(div.3A~D)&&dp进阶 CF#764(div.3) Problem - A - Codeforces 题意 一个数列,每次操作可以使这个数列中的任何数加1,问最少 ...

  7. CF #764 Div.3(B ~D)

    CF #764 Div.3 B题 Make AP 给定a b c 使其中一个数 乘 任意正整数m 问是否能构成成差数列 我们可以想到等差数列的性质 2b=a+c2b = a + c 2b=a+c 思路 ...

  8. cf #825 Div.2(A~C2)

    Cf #825 Div.2 文章目录 Cf #825 Div.2 [A. Make A Equal to B](https://codeforces.com/contest/1736/problem/ ...

  9. edu cf #138 Div.2(A~D)

    edu cf #138 Div.2 文章目录 edu cf #138 Div.2 [A. Cowardly Rooks](https://codeforces.com/contest/1749/pro ...

最新文章

  1. 解读 | 2019 年 10 篇计算机视觉精选论文(上)
  2. 数据挖掘十大经典算法之——AdaBoost 算法
  3. echarts设置折线图属性
  4. matlab绘制csv图片,Matlab处理csv文件与图形绘制总结
  5. Android开发之Android Material Design Toolbar自定义随笔
  6. AbstractQueuedSynchronizer理解之三(Semaphore)
  7. 怎样更改SQL Server 2008的身份验证方式
  8. delphi 监控文件变化_监控Linux文件变化,防止系统被黑
  9. pandas.DataFrame将行(index)和列(column)进行转置
  10. 数据智能,慧眼识“真”——个推大数据风控产品亮相
  11. 智慧餐饮系统开发优化用户体验提高经营效率
  12. 【论文阅读】A Memory-Efficient Deterministic Finite Automaton-Based Bit-Split String Matching Scheme
  13. 力矩目标值 fTorque计算(伺服力矩控制模式)
  14. 从小白开始教你怎样在Eclipse中使用Git(番外) - 各种图标的含义
  15. 免费无广告的统计工具TalKingData
  16. 【官档整理】原生 MSDN 纯净版 WIN PE 创建 下载方法
  17. 2021免费在线客服系统排行
  18. Druid实战--摄入数据规范Ingestion Spec
  19. C语言3sum,leetcode题目
  20. 如何修改 gitlab 的项目名称

热门文章

  1. Axure如何实现全选、全不选功能
  2. Bazel build Remote-caching
  3. ModuleNotFoundError: No module named ‘django‘
  4. 3-maven学习-学习创建maven的依赖属性
  5. 使用 OBS 进行区域录制
  6. ASP.NET MVC 学习(一)--MVC的cshtml的介绍
  7. mip-NeRF代码debug
  8. Maximum length exceeded错误的解决办法
  9. 一文8个步骤从0到1教你基于数据驱动的接口自动化框架封装
  10. 全新UI任务悬赏抢单源码-附带简单安装教程