CF #689(Div. 2) B - Find the Spruce
题目如下:
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相关推荐
- CF #366(div.2) C 模拟,思维
CF #366(div.2) C. Thor 题意:一个手机n个联系人,有q个操作.每次给出ty和ai,如ty==1,表示收到ai的一条信息:如ty==2,表示将ai发的信息都看掉:如ty==3, ...
- CF #371 (Div. 2) C、map标记
1.CF #371 (Div. 2) C. Sonya and Queries map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...
- 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 ...
- cf #818 Div.2(A~C)
Cf #818 Div.2 文章目录 Cf #818 Div.2 [A. Madoka and Strange Thoughts](https://codeforces.com/contest/171 ...
- CF #683 div.2
CF #683 div.2 目前 ABCD A. Add Candies B. Numbers Box C. Knapsack D. Catching Cheaters 结尾 A. Add Candi ...
- CF#764(div.3A~D)dp进阶
CF#764(div.3A~D)&&dp进阶 CF#764(div.3) Problem - A - Codeforces 题意 一个数列,每次操作可以使这个数列中的任何数加1,问最少 ...
- 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 思路 ...
- 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/ ...
- 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 ...
最新文章
- 解读 | 2019 年 10 篇计算机视觉精选论文(上)
- 数据挖掘十大经典算法之——AdaBoost 算法
- echarts设置折线图属性
- matlab绘制csv图片,Matlab处理csv文件与图形绘制总结
- Android开发之Android Material Design Toolbar自定义随笔
- AbstractQueuedSynchronizer理解之三(Semaphore)
- 怎样更改SQL Server 2008的身份验证方式
- delphi 监控文件变化_监控Linux文件变化,防止系统被黑
- pandas.DataFrame将行(index)和列(column)进行转置
- 数据智能,慧眼识“真”——个推大数据风控产品亮相
- 智慧餐饮系统开发优化用户体验提高经营效率
- 【论文阅读】A Memory-Efficient Deterministic Finite Automaton-Based Bit-Split String Matching Scheme
- 力矩目标值 fTorque计算(伺服力矩控制模式)
- 从小白开始教你怎样在Eclipse中使用Git(番外) - 各种图标的含义
- 免费无广告的统计工具TalKingData
- 【官档整理】原生 MSDN 纯净版 WIN PE 创建 下载方法
- 2021免费在线客服系统排行
- Druid实战--摄入数据规范Ingestion Spec
- C语言3sum,leetcode题目
- 如何修改 gitlab 的项目名称
热门文章
- Axure如何实现全选、全不选功能
- Bazel build Remote-caching
- ModuleNotFoundError: No module named ‘django‘
- 3-maven学习-学习创建maven的依赖属性
- 使用 OBS 进行区域录制
- ASP.NET MVC 学习(一)--MVC的cshtml的介绍
- mip-NeRF代码debug
- Maximum length exceeded错误的解决办法
- 一文8个步骤从0到1教你基于数据驱动的接口自动化框架封装
- 全新UI任务悬赏抢单源码-附带简单安装教程