TOJ 4120 Zombies VS Plants

本文解析了一个基于游戏《植物大战僵尸》改编的算法问题——ZombiesVSPlants。玩家扮演僵尸管理者,目标是在每行放置足够的僵尸以吃掉所有植物,并计算所需的最小总生命值。文章提供了完整的 C++ 代码实现,重点处理了输入中可能出现的大量空白字符的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

链接:http://acm.tju.edu.cn/toj/showp4120.html
4120.   Zombies VS Plants
Time Limit: 1.0 Seconds   Memory Limit: 65536K
Total Runs: 268   Accepted Runs: 36


tmeteorj recently is interested in a game Plants VS Zombies like following picture.


And his brain hole is opened so he want to you to solve this problem.
Your role is zombies' manager, and your task is place enough zombies to eat all plants on each line.
The rules are as follows:
1.Each zombies has health point from 1 to infinity.
2.Each plants has its attack point which we will tell you and will not greater than 1000.
3.All plants are so afraid of zombies, so if a plant's attack point is not greater than it's line's zombie's HP, this plant will be scared silly. So its attack point will become zero.
4.Zombies eat plants from right to the left.
5.You can place any number of zombies on each line.
Your task is to calculate the minimal total zombies' HP you need to place in order to eat all plants.

 

INPUT

First line, there will a number T(T≤10), means the test case of this problem.
After this, there will be a number n(n≤100), means there are n lines in the yard.
Each line contains several plants' attack points. The plants' number will not greater than 100.
There may be some blanks in anywhere.

OUTPUT

For each case, print the minimal HP for the question.

Sample Input

 


3
2
1 2 3 4 5
2 3 4 5
1
1 2 3 4 5
2
1 2 3 4 5 6
1 2

 

Sample Output

 


10
5
8
/*
遇见过的最坑的题目,主要坑点在与输入会在各处出现空格
听说还可能出现一行1500空格....
所以得用好getchar,这是关键
*/ 
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
int main()
{
	int i,j,k,zhi,fu,flag,N,T;
	char ch;
	int sum,mx ;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&N);
		while(getchar()!='\n');
		sum=0;
		for(int i=1;i<=N;i++){
			flag=0;
			zhi=0;
			fu=1;
			mx=1;
			while(1){
				ch=getchar();
				if(ch=='-'){
					flag=1;
					fu=-1;
				}
				else if(ch==' '){
					mx=max(mx,fu*zhi);
					fu=1;
					zhi=0;
				}
				else if(ch=='\n'){
					if(flag){
						mx=max(mx,fu*zhi);
						fu=1;
						zhi=0;
					}
					else mx=0;
					break;
				}
				else{
					zhi=zhi*10+ch-'0';
					flag=1;
				}
			}
			sum+=mx;
		}
		printf("%d\n",sum);
	}
	return 0;
}

 

转载于:https://www.cnblogs.com/Basasuya/p/8433779.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值