lightoj 1389 - Scarecrow 贪心
2016-04-13 12:24
330 查看
给定一个1*n的图,#代表坏的地,点代表庄稼,要放置稻草人防止乌鸦,一个稻草人可以保护本身和左右两端,问最少需要多少个稻草人。
三个点为一组。遇到一个#可能的情况是前面的点数量是三的倍数,刚好不用管,余数为2,那么就必须要放置一个啦。余数为1..有可能的情况是.#.或者.##,其实不管什么情况都是要放置一个的,直接跳过下个点,不管是啥都行。
我的代码最后要处理边界,其实在最后面加个#就可以不考虑边界了...
我看到题目的第一想法是DP....应该可解。
三个点为一组。遇到一个#可能的情况是前面的点数量是三的倍数,刚好不用管,余数为2,那么就必须要放置一个啦。余数为1..有可能的情况是.#.或者.##,其实不管什么情况都是要放置一个的,直接跳过下个点,不管是啥都行。
我的代码最后要处理边界,其实在最后面加个#就可以不考虑边界了...
我看到题目的第一想法是DP....应该可解。
#include<bits/stdc++.h> using namespace std; #define ll long long #define ull unsigned long long #define mod 1000007 #define inf 0x3f3f3f3f #define N 100100 using namespace std; char s[200]; int main() { int t; scanf("%d",&t); for(int cas=1;cas<=t;cas++) { int n; scanf("%d",&n); scanf("%s",s); int ans=0,cnt=0; for(int i=0;i<n;i++) { if(s[i]=='.') cnt++; else { ans+=cnt/3; cnt=cnt%3; if(cnt==2) ans++; else if(cnt==1) { i++; ans++; } cnt=0; } } if(cnt) ans+=cnt/3+(cnt%3?1:0);//剩余有cnt点没考虑 printf("Case %d: %d\n",cas,ans); } return 0; }
相关文章推荐
- kvm-GT
- 简单版 无库函数
- Spring中Bean的作用域有哪些
- ubutun下没有公匙签名不能验证问题!
- 复杂单链表的实现
- C和C指针读书笔记
- C++作业3
- 调用摄像头拍照
- Boosting学习(三)—Adaboost原理白话
- 搭建一个php框架
- 复杂链表的复制
- 几种 angular 循环。。。。
- $.get()/$.post()/$ajax() 异步请求的例子
- ( ̄︶ ̄)↗ 涨姿势
- linux 挂载ntfs格式分区
- C++类中的static数据成员,static成员函数
- eclipse 逆向工程生成hibernate实体类(注解或配置文件)
- WebView的常规用法
- NodeJS、NPM安装配置步骤(windows版本)
- 数组中的逆序对