首页 > 其他 > 详细

UVa 12405 - Scarecrow

时间:2015-04-23 00:02:37      阅读:305      评论:0      收藏:0      [点我收藏+]

题目:给你一条直线的麦田里面有的是荒地,有很多乌鸦,现在要放稻草人赶走乌鸦,

            每个稻草人影响自己所在的格子和两旁的格子,问最少要多少个稻草人。

分析:dp,动态规划。

            状态:f(i)表示前i个麦田需要最少的稻草人数;

            方程:f(i)= f(i-1)       (s[i] == ‘#‘)

                                     f(i-3)+1   (s[i] == ‘.‘)

说明:注意初始状态有3个。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

char buf[105];
int  f[105];

int main()
{
	int T,N;
	while (~scanf("%d",&T)) {
		for (int t = 1; t <= T; ++ t) {
			scanf("%d%s",&N,buf);
			
			f[0] = (buf[0]=='.'?1:0);
			f[1] = (buf[0]=='.'||buf[1]=='.'?1:0);
			f[2] = (buf[0]=='.'||buf[1]=='.'||buf[2]=='.'?1:0);
			for (int i = 3; i < N; ++ i)
				if (buf[i] == '#')
					f[i] = f[i-1];
				else f[i] = f[i-3]+1;
			
			printf("Case %d: %d\n",t,f[N-1]);
		}
	}
    return 0;
}


UVa 12405 - Scarecrow

原文:http://blog.csdn.net/mobius_strip/article/details/45204261

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!