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 |
Re:非常经典的动态规划,用递归下的记忆化搜索来实现。我将整个实现流程和很多容易错的地方都注释起来,希望能够对那些比较困惑的朋友有所帮助。这程序花了我半个小时调试和写注释,题不在多,经典则行。好晚了,好累,睡觉~~In Reply To:非常经典的动态规划,用递归下的记忆化搜索来实现。我将整个实现流程和很多容易错的地方都注释起来,希望能够对那些比较困惑的朋友有所帮助。这程序花了我半个小时调试和写注释,题不在多,经典则行。好晚了,好累,睡觉~~ Posted by:gfedcba at 2009-02-28 03:37:51 #include <iostream> using namespace std; int dx[]={0,-1,0,1}; int dy[]={1,0,-1,0}; int net[124][124]; int cnt[124][124]; int r,c,temp; int maxnum(int a,int b) { return a>=b?a:b; } int dp(int x,int y) { int maxn = 0; if (cnt[y][x]>0) { return cnt[y][x]; } for (int i=0; i<4; i++) { temp=net[y][x]; x+=dx[i]; y+=dy[i]; if (y>=0&&y<r&&x>=0&&x<c&&temp>net[y][x]) { maxn=maxnum(maxn,dp(x,y)); } x-=dx[i]; y-=dy[i]; } cnt[y][x]=maxn+1; return cnt[y][x]; } int main() { scanf("%d%d",&r,&c); for (int i=0; i<r; i++) { for (int j=0; j<c; j++) { scanf("%d",&net[i][j]); } } memset(cnt,0,sizeof(cnt)); for (int i=0;i<r;i++) { for (int j=0;j<c;j++) dp(j,i); } for (int i=0;i<r;i++) { for (int j=0;j<c;j++) if (cnt[0][0]<cnt[i][j]) cnt[0][0]=cnt[i][j]; } printf("%d\n",cnt[0][0]); return 0; } 按照楼主的思路写的代码。 本人菜鸟,刚上路,谢谢楼主的分享! Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator