joj 2703: Paper Cutting

唐牛的解题报告中说是动态规划,但是本人比较蠢,就搜索水之!!!也难得想动态规划的方法了!!!

//怎样计算此题复杂度??? //2703 DP,一个更好的做法是30*500*500的DP,用动态规划怎么做啊??? #include #include struct paper { char letter; int score; }a[505][505]; char str[40]; int N,M; int ans=0; int vis[505][505]; void Max_score(int Max,int k,int x,int y) { //if(x==1&&y==2) // {printf("%d******%d/n",a[x][y].score,Max);} // printf("%d**%d**%d/n",k,x,y); if(str[k]=='/0') { //printf("******%d/n",Max); //printf("str[k]==0/n"); if(Max>ans) ans=Max; return; } if(x<0||x>=N||y<0||y>=M) { // printf("<0/n"); return; } if(str[k]!=a[x][y].letter) { // printf("%c***%c/n",str[k],a[x][y].letter); // printf("!=/n"); //Max=0; return; } if(str[k]==a[x][y].letter) { if(vis[x][y]==1) { vis[x][y]=0; //Max=0; return; } vis[x][y]=1; Max+=a[x][y].score; Max_score(Max,k+1,x+1,y); Max_score(Max,k+1,x-1,y); Max_score(Max,k+1,x,y+1); Max_score(Max,k+1,x,y-1); vis[x][y]=0; } } int main() { int T; scanf("%d",&T); memset(vis,0,sizeof(vis)); while(T--) { scanf("%d%d",&N,&M); char ss[505]; for(int i=0;i

你可能感兴趣的:(joj 2703: Paper Cutting)