| ||||||||||
| 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 | |||||||||
WA注意:数组开大一点(论大数组的重要性)(附16MS代码)(DP水题)#include <cstdio>
#include <cstdlib>
#include <string>
#include <cstring>
#include <cmath>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <map>
//库
using namespace std;
struct whe{
int num,h;
};
int cmp(whe ao,whe bo){
return ao.h>bo.h;
}
int max(int a,int b,int c,int d){
int ans=a;
ans=max(max(a,b),max(c,d));
return ans;
}
int main(){
int r,c;
scanf("%d %d",&r,&c);
whe a[10000];//这里开了3个数组,应该可以更少的,数组大小全部改成更大的才能过,如20000,10000的话是过不了的
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
scanf("%d",&a[i*c+j].h);
int b[10000];
for(int i=0;i<r*c;i++)
b[i]=a[i].h;
for(int i=0;i<r*c;i++)
a[i].num=i;
sort(a+0,a+r*c,cmp);
int f[10000];
memset(f,0,sizeof(f));
for(int i=0;i<r*c;i++)
f[a[i].num]=max((a[i].num+c<r*c)*f[a[i].num+c]*(b[a[i].num+c]!=b[a[i].num]),(a[i].num-c>=0)*f[a[i].num-c]*(b[a[i].num-c]!=b[a[i].num]),((a[i].num+1)/c==(a[i].num)/c)*f[a[i].num+1]*(b[a[i].num+1]!=b[a[i].num]),((a[i].num-1)/c==(a[i].num)/c)*f[a[i].num-1]*(b[a[i].num-1]!=b[a[i].num]))+1;
int mmaaxx=0;
for(int i=0;i<r*c;i++)
mmaaxx=mmaaxx>f[i]?mmaaxx:f[i];
printf("%d\n",mmaaxx);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator