Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
why wrong/*在一个确定的时刻,每个点作为endpoints可得多少分 在下一时刻,每个点作为endpoints可得多少分为: dp[i][j][k]=max{dp[x~][y~][k-1]+Mole[x][y][k]} 表示以(x~,y~)为起始坐标,i,j为目标坐标,在上一时刻(x~,y~)得到的最多分加上沿路可得到的分; 取这些可选路线中使第k时刻以(i,j)为目标坐标得到最多分的路线放在dp[i][j][k] */ #include<iostream> #include<cstdio> using std::max; const int N=32; const int T=11; //可选路线 short north[6][2]={ {0,-1},{0,1},{0,2},{0,3},{0,4},{0,5} }; short south[6][2]={ {0,1},{0,-1},{0,-2},{0,-3},{0,-4},{0,-5} }; short west[6][2]={ {1,0},{-1,0},{-2,0},{-3,0},{-4,0},{-5,0} }; short east[6][2]={ {-1,0},{1,0},{2,0},{3,0},{4,0},{5,0} }; short length1[5]={1,2,3,4,5}; short northEast[4][2]={ {-1,-1},{1,1},{2,2},{3,3} }; short southEast[4][2]={ {-1,1},{1,-1},{2,-2},{3,-3} }; short southWest[4][2]={ {1,1},{-1,-1},{-2,-2},{-3,-3} }; short northWest[4][2]={ {1,-1},{-1,1},{-2,2},{-3,3} }; short length2[5]={0,1,2,2,3}; short northEast1[2][2]={ {-1,-4},{1,4} }; short southEast1[2][2]={ {-1,4},{1,-4} }; short southWest1[2][2]={ {1,4},{-1,-4} }; short northWest1[2][2]={ {1,-4},{-1,4} }; short northEast6[2][2]={ {-4,-1},{4,1} }; short southEast6[2][2]={ {4,-1},{-4,1} }; short southWest6[2][2]={ {4,1},{-4,-1} }; short northWest6[2][2]={ {-4,1},{4,-1} }; short length3[5]={0,0,0,0,1}; short northEast2[2][2]={ {-1,-3},{1,3} }; short southEast2[2][2]={ {-1,3},{1,-3} }; short southWest2[2][2]={ {1,3},{-1,-3} }; short northWest2[2][2]={ {1,-3},{-1,3} }; short northEast5[2][2]={ {-3,-1},{3,1} }; short southEast5[2][2]={ {3,-1},{-3,1} }; short southWest5[2][2]={ {3,1},{-3,-1} }; short northWest5[2][2]={ {-3,1},{3,-1} }; short length4[5]={0,0,0,1,1}; short northEast3[3][2]={ {-1,-2},{1,2},{2,4} }; short southEast3[3][2]={ {-1,2},{1,-2},{2,-4} }; short southWest3[3][2]={ {1,2},{-1,-2},{-2,-4} }; short northWest3[3][2]={ {1,-2},{-1,2},{-2,4} }; short northEast4[3][2]={ {-2,-1},{2,1},{4,2} }; short southEast4[3][2]={ {2,-1},{-2,1},{-4,2} }; short southWest4[3][2]={ {2,1},{-2,-1},{-4,-2} }; short northWest4[3][2]={ {-2,1},{2,-1},{4,-2} }; short length5[5]={0,0,1,1,2}; short northEast7[2][2]={ {-2,-3},{2,3} }; short southEast7[2][2]={ {2,-3},{-2,3} }; short southWest7[2][2]={ {2,3},{-2,-3} }; short northWest7[2][2]={ {-2,3},{2,-3} }; short northEast8[2][2]={ {-3,-2},{3,2} }; short southEast8[2][2]={ {3,-2},{-3,2} }; short southWest8[2][2]={ {3,2},{-3,-2} }; short northWest8[2][2]={ {-3,2},{3,-2} }; short length6[5]={0,0,0,1,1}; short northEast9[2][2]={ {-3,-4},{3,4} }; short southEast9[2][2]={ {3,-4},{-3,4} }; short southWest9[2][2]={ {3,4},{-3,-4} }; short northWest9[2][2]={ {-3,4},{3,-4} }; short northEast10[2][2]={ {-4,-3},{4,3} }; short southEast10[2][2]={ {4,-3},{-4,3} }; short southWest10[2][2]={ {4,3},{-4,-3} }; short northWest10[2][2]={ {-4,3},{4,-3} }; short length7[5]={0,0,0,0,1}; //每个时刻老鼠出现的表 short Mole[N][N][T]; //存每个时刻每个点作为目标点可得的最多分 int dp[N][N][T]; int n,d,m; int maxt; void init()//初始化 { memset(Mole,0,sizeof(Mole)); memset(dp,0,sizeof(dp)); maxt=0; } void input() { int x,y,t; for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&t); Mole[x+5][y+5][t]=1; if(maxt<t) maxt=t; } } int getMax(int x,int y,int k)//找出以(x,y)为endpoints可得的最多分 { int temp; int result=0; int i; int posX,posY; if(length1[d-1]>0) { for(i=1;i<=length1[d-1];i++) { posX=x+north[i][0]; posY=y+north[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=north[0][0]; posY+=north[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length1[d-1];i++) { posX=x+south[i][0]; posY=y+south[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=south[0][0]; posY+=south[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length1[d-1];i++) { posX=x+east[i][0]; posY=y+east[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=east[0][0]; posY+=east[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length1[d-1];i++) { posX=x+west[i][0]; posY=y+west[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=west[0][0]; posY+=west[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } } if(length2[d-1]>0) { for(i=1;i<=length2[d-1];i++) { posX=x+northEast[i][0]; posY=y+northEast[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast[0][0]; posY+=northEast[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length2[d-1];i++) { posX=x+southEast[i][0]; posY=y+southEast[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast[0][0]; posY+=southEast[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length2[d-1];i++) { posX=x+southWest[i][0]; posY=y+southWest[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest[0][0]; posY+=southWest[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length2[d-1];i++) { posX=x+northWest[i][0]; posY=y+northWest[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest[0][0]; posY+=northWest[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } } if(length3[d-1]>0) { for(i=1;i<=length3[d-1];i++) { posX=x+northEast1[i][0]; posY=y+northEast1[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast1[0][0]; posY+=northEast1[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length3[d-1];i++) { posX=x+northEast6[i][0]; posY=y+northEast6[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast6[0][0]; posY+=northEast6[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length3[d-1];i++) { posX=x+southEast1[i][0]; posY=y+southEast1[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast1[0][0]; posY+=southEast1[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length3[d-1];i++) { posX=x+southEast6[i][0]; posY=y+southEast6[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast6[0][0]; posY+=southEast6[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length3[d-1];i++) { posX=x+southWest1[i][0]; posY=y+southWest1[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest1[0][0]; posY+=southWest1[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length3[d-1];i++) { posX=x+southWest6[i][0]; posY=y+southWest6[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest6[0][0]; posY+=southWest6[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length3[d-1];i++) { posX=x+northWest1[i][0]; posY=y+northWest1[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest1[0][0]; posY+=northWest1[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length3[d-1];i++) { posX=x+northWest6[i][0]; posY=y+northWest6[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest6[0][0]; posY+=northWest6[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } } if(length4[d-1]>0) { for(i=1;i<=length4[d-1];i++) { posX=x+northEast2[i][0]; posY=y+northEast2[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast2[0][0]; posY+=northEast2[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length4[d-1];i++) { posX=x+northEast5[i][0]; posY=y+northEast5[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast5[0][0]; posY+=northEast5[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length4[d-1];i++) { posX=x+southEast2[i][0]; posY=y+southEast2[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast2[0][0]; posY+=southEast2[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length4[d-1];i++) { posX=x+southEast5[i][0]; posY=y+southEast5[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast5[0][0]; posY+=southEast5[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length4[d-1];i++) { posX=x+southWest2[i][0]; posY=y+southWest2[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest2[0][0]; posY+=southWest2[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length4[d-1];i++) { posX=x+southWest5[i][0]; posY=y+southWest5[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest5[0][0]; posY+=southWest5[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length4[d-1];i++) { posX=x+northWest2[i][0]; posY=y+northWest2[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest2[0][0]; posY+=northWest2[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length4[d-1];i++) { posX=x+northWest5[i][0]; posY=y+northWest5[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest5[0][0]; posY+=northWest5[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } } if(length5[d-1]>0) { for(i=1;i<=length5[d-1];i++) { posX=x+northEast3[i][0]; posY=y+northEast3[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast3[0][0]; posY+=northEast3[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length5[d-1];i++) { posX=x+northEast4[i][0]; posY=y+northEast4[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast4[0][0]; posY+=northEast4[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length5[d-1];i++) { posX=x+southEast3[i][0]; posY=y+southEast3[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast3[0][0]; posY+=southEast3[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length5[d-1];i++) { posX=x+southEast4[i][0]; posY=y+southEast4[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast4[0][0]; posY+=southEast4[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length5[d-1];i++) { posX=x+southWest3[i][0]; posY=y+southWest3[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest3[0][0]; posY+=southWest3[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length5[d-1];i++) { posX=x+southWest4[i][0]; posY=y+southWest4[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest4[0][0]; posY+=southWest4[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length5[d-1];i++) { posX=x+northWest3[i][0]; posY=y+northWest3[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest3[0][0]; posY+=northWest3[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length5[d-1];i++) { posX=x+northWest4[i][0]; posY=y+northWest4[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest4[0][0]; posY+=northWest4[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } } if(length6[d-1]>0) { for(i=1;i<=length6[d-1];i++) { posX=x+northEast7[i][0]; posY=y+northEast7[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast7[0][0]; posY+=northEast7[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length6[d-1];i++) { posX=x+northEast8[i][0]; posY=y+northEast8[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast8[0][0]; posY+=northEast8[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length6[d-1];i++) { posX=x+southEast7[i][0]; posY=y+southEast7[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast7[0][0]; posY+=southEast7[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length6[d-1];i++) { posX=x+southEast8[i][0]; posY=y+southEast8[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast8[0][0]; posY+=southEast8[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length6[d-1];i++) { posX=x+southWest7[i][0]; posY=y+southWest7[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest7[0][0]; posY+=southWest7[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length6[d-1];i++) { posX=x+southWest8[i][0]; posY=y+southWest8[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest8[0][0]; posY+=southWest8[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length6[d-1];i++) { posX=x+northWest7[i][0]; posY=y+northWest7[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest7[0][0]; posY+=northWest7[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length6[d-1];i++) { posX=x+northWest8[i][0]; posY=y+northWest8[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest8[0][0]; posY+=northWest8[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } } if(length7[d-1]>0) { for(i=1;i<=length7[d-1];i++) { posX=x+northEast9[i][0]; posY=y+northEast9[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast9[0][0]; posY+=northEast9[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length7[d-1];i++) { posX=x+northEast10[i][0]; posY=y+northEast10[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northEast10[0][0]; posY+=northEast10[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length7[d-1];i++) { posX=x+southEast9[i][0]; posY=y+southEast9[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast9[0][0]; posY+=southEast9[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length7[d-1];i++) { posX=x+southEast10[i][0]; posY=y+southEast10[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southEast10[0][0]; posY+=southEast10[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length7[d-1];i++) { posX=x+southWest9[i][0]; posY=y+southWest9[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest9[0][0]; posY+=southWest9[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length7[d-1];i++) { posX=x+southWest10[i][0]; posY=y+southWest10[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=southWest10[0][0]; posY+=southWest10[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length7[d-1];i++) { posX=x+northWest9[i][0]; posY=y+northWest9[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest9[0][0]; posY+=northWest9[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } for(i=1;i<=length7[d-1];i++) { posX=x+northWest10[i][0]; posY=y+northWest10[i][1]; if((posX>=0 && posX<n) && (posY>=0 && posY<n)) { temp=dp[posX][posY][k-1]+Mole[posX][posY][k]; while(posX!=x || posY!=y) { posX+=northWest10[0][0]; posY+=northWest10[0][1]; temp+=Mole[posX][posY][k]; } result=temp>result?temp:result; } } } return result; } void dynamic()//求出一时刻每个点作为目标点可得的最多分,则下一时刻dp[i][j][k]=max{dp[x~][y~][k-1]+Mole[x][y][k]} { int i,j,k; for(k=1;k<=maxt;k++) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { dp[i][j][k]=getMax(i,j,k); } } } } int getResult()//从最终时刻中找到最优的结果 { int i,j; int result=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) if(result<dp[i][j][maxt]) result=dp[i][j][maxt]; } return result; } int main() { while(scanf("%d%d%d",&n,&d,&m),n!=0 || d!=0 || m!=0) { n+=10; init(); input(); dynamic(); printf("%d\n",getResult()); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator