I have used many solutions to this problems but always i gain Time limit exceed please tell me where is my algorithm exceeding the time limit....if use of unsigned long long int is not alllowed.......
#include"stdio.h"
unsigned long long int part(unsigned long int,unsigned long int,unsigned long int ,unsigned long int *);
int main(){
unsigned long int h[100000],t,i;
while(scanf("%ld",&t),t){
for(i=0;i<t;i++)
scanf("%ld",&h[i]);
printf("%lld\n",part(0,t-1,0,h));
}
return 0;
}
unsigned long long int part(unsigned long int j,unsigned long int k,unsigned long int level,unsigned long int *h){
unsigned long int min,i,flag;
unsigned long long int ret_val,ans;
min=h[j];
for(i=j;i<=k;i++){
if(min>h[i]) min=h[i];
}
/*for(i=j;i<=k;i++){
h[i]=h[i]-min;
}*/
level+=min;
flag=j;
/*while(flag<=k&&h[flag]==0)
flag++;
if(flag>k)
flag--;*/
ret_val=(min==0)?0:(k-j+1)*level;
for(i=j;i<=k;i++){
h[i]=h[i]-min;
/**********************/
while(flag<=k&&h[flag]==0)
flag++;
if(flag>k)
flag--;
/*********************/
if((h[i]==0||i==k)&&h[flag]!=0&&flag<=i){
if(i==k){
ans=part(flag,i,level,h);
}
else{
ans=part(flag,i-1,level,h);
}
ret_val=(ans>ret_val?ans:ret_val);
/*while(flag<=k&&h[flag]==0){
flag++;
}
if(flag>k) flag--;*/
}
}
return ret_val;
}
created
last reply
- 12
replies
- 676
views
- 5
users