[夏休み合宿]リハビリ練習試合D-無料パイ
7218 ワード
#include
#include
#include
#include
#include
#define DEBUG if(0)//
#define MAX 100010
using namespace std;
int N;
int map[2][MAX][15];
int f(int x,int y){
if(x0,5-y) || x>min(10,y+5) || y<0)return 0;//
if(map[1][y][x]>=0)return map[1][y][x]; //
map[1][y][x]=max(f(x-1,y-1),max(f(x,y-1),f(x+1,y-1)));//
return map[1][y][x]+=map[0][y][x];//
}
int main(){
while(cin>>N,N>0){
int a=0,b=0,maxt=0;
memset(map[0],0,sizeof(map[0]));
memset(map[1],-1,sizeof(map[1]));
for(int i=0;i){
scanf("%d%d",&a,&b);
map[0][b][a]++;//
if(maxt//
}
DEBUG cout<endl;
DEBUG{
for(int i=0;i<=maxt;i++){
for(int j=0;j<=10;j++){
cout<
https://vjudge.net/contest/382410#problem/D