首页 > 代码库 > ADV-caikuang

ADV-caikuang

#include<stdio.h> 
int step[99][99]; 
int sum; 
int min=999999; 
int cas; int N; 
int H; int V; 
int C1; 
int R1;
 int M1; 
int C2; 
int R2; 
int M2; 
int ans[15]; 
int bu[15]; 
int ju[15]; 
void ji(int n) 
{  
int i; 
 int j;  
int a;  
for(i=0;i<H;i++) 
 {  
 sum=0; 
  for(j=0;j<i;j++)
   {   
 sum=sum+C1*step[n][j];   
    }  
 if(sum>min)   
 continue;  
 for(a=j;a<H;a++)  
 {    
sum=sum+C2*step[n][a];  
 }  
 if(sum>min)    
continue;   
if(H-1-i-i==0||H-1-i-i==-1||H-1-i-i==1)  
 {    
if(min>sum)    
{    
 min=sum;  
  }  
 }  
 else  
 {   
 if(H-1-i-i>0)  
   sum=sum+(H-1-i-i)*R2; 
   else    
 sum=sum-(H-1-i-i)*R1;  
  if(min>sum)   
 {     
min=sum;   
 }   
}

} 
} 
void qu(int a,int st) 
{  
if(st==N)  
{     
 sum=0;   
for(int i=0;i<N;i++) 
   sum=sum+bu[i];  
 for(int i=0;i<=N-2;i++)   
 sum=sum+(M1*M1+M2*M2)*(ju[i+1]-ju[i]); 
  if(min>sum)   
 {    
 min=sum;   
 }     
 return;  
}  
for(int i=a;i<V;i++) 
 {   
ju[st]=i;  
 bu[st]=ans[i];  
 qu(i+2,st+1); 
 } 
} 
int main() 
{  freopen("in.txt","r",stdin);
  int o=1;
  int r; 
 scanf("%d",&cas);
  while(o!=cas+1) 
 {   
scanf("%d%d%d",&N,&H,&V);
   for(int i=0;i<V;i++)   
{    
for(int j=0;j<H;j++) 
   {   
  scanf("%d",&step[i][j]);   
 }   
}   
scanf("%d%d%d",&C1,&R1,&M1); 
  scanf("%d%d%d",&C2,&R2,&M2);  
 for(int a=0;a<V;a++)   
{    
min=999999;   
ji(a);  
  ans[a]=min;   
 r=a;   
}  
 if(r==0)   
{    
printf("Case #%d\n",o);  
  printf("%d\n",min);   
}   
else   
{   
 qu(0,0);   
 printf("Csae #%d\n",o);  
  printf("%d\n",min);  
 }   
o++;

 }  
 return 0;
 }

 

ADV-caikuang