杭电1176
题目
AC代码
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int map[20][100000];
int max(int a,int b,int c)
{
int temp=a;
if(b>a) temp=b;
if(temp<c) temp=c;
return temp;
}
int max(int a,int b)
{
if(a>=b) return a;
else return b;
}
int main()
{
int n;
while(cin>>n&&n!=0)
{
int Tmax=0;
int place,time;
memset(map,0,sizeof(map));
for(int i=1;i<=n;i++)
{
cin>>place>>time;
Tmax=max(time,Tmax);
map[place][time]++;
}
for(int i=Tmax-1;i>=0;i--)
{
for(int j=0;j<=10;j++)
{
if(j==0)
{
map[j][i]=max(map[j+1][i+1],map[j][i+1])+map[j][i];
continue;
}
else if(j==10)
{
map[j][i]=max(map[j-1][i+1],map[j][i+1])+map[j][i];
continue;
}
map[j][i]=max(map[j-1][i+1],map[j+1][i+1],map[j][i+1])+map[j][i];
}
}
cout<<map[5][0]<<endl;
}
return 0;
}
解题思路
转换成数塔问题,求解子问题
用时间地点数组记录每个状态
出现错误
max函数系统自带的是两个参数的,需要自己写函数,如果不用G++编译还需要编写两个参数的,不过采用系统自带的max函数嵌套使用也是可以的。