long long find_ans(int i,int j){ if(table[i][j]!=0) return table[i][j]; long long int min=999999999,prob; int k,ind; if(i-1>=1){ ind=0; for(k=1;k<=n;k++){ if(a[k]>0) ind++; if(a[k]==i-1) break; } a[k]=0; min=(j-i+2)*ind+find_ans(i-1,j); a[k]=i-1; } if(j+1<=n){ ind=0; for(k=1;k<=n;k++){ if(a[k]>0) ind++; if(a[k]==j+1) break; } a[k]=0; prob=(j-i+2)*ind+find_ans(i,j+1); if(prob<min) min=prob; a[k]=j+1; } if(min!=999999999) return table[i][j]=min; return 0; }
long long find_ans(int i,int j){ if(table[i][j]!=-1) return table[i][j]; //return table[i][j]=MIN((j-i+2)*ind[j][i][1]+find_ans(i,j+1),(j-i+2)*ind[j][i][0]+find_ans(i-1,j)); long long int min=999999999,prob; int k; if(i-1>=1){ /*ind=0; for(k=1;k<=n;k++){ if(a[k]>0) ind++; if(a[k]==i-1) break; } a[k]=0; min=(j-i+2)*ind+find_ans(i-1,j); a[k]=i-1;*/ min=ind[j][i][0]*(j-i+2)+find_ans(i-1,j); } if(j+1<=n){ /*ind=0; for(k=1;k<=n;k++){ if(a[k]>0) ind++; if(a[k]==j+1) break; } a[k]=0; prob=(j-i+2)*ind+find_ans(i,j+1); if(prob<min) min=prob; a[k]=j+1;*/ prob=(j-i+2)* (ind[j][i][1])+find_ans(i,j+1); if(prob<min) min=prob; } if(min!=999999999) return table[i][j]=min; return 0; }
int main(){ init(); ll n,q,k; int t; scanf("%lld%lld",&n,&q); ll total=find_ans(n); while(q--){ scanf("%d%lld",&t,&k); if(t==1){ printf("%lld\n",find_ans(gcd(n,k))); continue; } if(n%k==0){ ll m=n/k; ll ans=find_ans(m); if(t==2) printf("%lld\n",ans); else printf("%lld\n",total-ans); } else{ if(t==2) puts("0"); else printf("%lld\n",total); } } return 0; }
int main(){ scanf("%d",&t); while(t--){ memset(table,0,sizeof(table)); scanf("%d",&n); for(i=1;i<=n;i++){ scanf("%d",&a[i]); index[a[i]]=i; } int res=a[1]; a[1]=0; long long min=1+find_ans(res,res),k; a[1]=res; // printf("%lld ",min); for(i=2;i<=n;i++){ res=a[i]; a[i]=0; if((k=i+find_ans(res,res))<min) min=k; //printf("%lld ",k); a[i]=res; } printf("%lld\n",min); } return 0; }
void find_ans(int*arr,int i){ if(i<n){ arr[i]=1; find_ans(arr,i+1); arr[i]=0; find_ans(arr,i+1); } else{ int j; for(j=0;j<n;j++) printf("%d ",arr[j]); printf("\n"); cnt++; } }
int main() { char col; int row; FILE *fin = fopen("camelot.in", "r"); fscanf(fin, "%d %d\n", &R, &C); fscanf(fin, "%c %d\n", &col, &row); king[0] = col - 'A' + 1; king[1] = row; while (2 == fscanf(fin, "%c %d\n", &col, &row)) { knights[num][0] = col - 'A' + 1; knights[num++][1] = row; } fclose(fin); int ans; ans = find_ans(); FILE *fout = fopen("camelot.out", "w"); fprintf(fout, "%d\n", ans); fprintf(stderr, "%d\n", ans); fclose(fout); exit(0); }
int main(){ scanf("%d",&n); int arr[n+4]; memset(arr,0,sizeof(arr)); find_ans(arr,0); printf("\ntotal %ld",cnt); system("pause"); return 0; }
int main(){ int L; find_ans(); while(scanf("%d", &L) && L){ printf("%llu\n", ans[L]); } return 0; }
int main(){ int N; int k, m; scanf("%d", &N); find_ans(); while(N--){ scanf("%d%d", &k, &m); printf("%d\n", ans[k][1][m]); } return 0; }
int main(){ int t; scanf("%d",&t); while(t--){ int i,j,b; scanf("%d",&n); memset(ind,INF,sizeof(ind)); memset(raw_ind,0,sizeof(raw_ind)); memset(table,-1,sizeof(table)); for(i=1;i<=n;i++){ scanf("%d",&b); raw_ind[b]=i; } for(i=1;i<n;i++){ ind[i][i][1]=raw_ind[i+1]-(raw_ind[i+1]>raw_ind[i]); for(j=i-1;j>0;j--){ ind[i][j][1]=ind[i][j+1][1]-(raw_ind[i+1]>raw_ind[j]); } } for(j=2;j<=n;j++){ ind[j][j][0]=raw_ind[j-1]-(raw_ind[j-1]>raw_ind[j]); for(i=j+1;i<=n;i++){ ind[i][j][0]=ind[i-1][j][0]-(raw_ind[j-1]>raw_ind[i]); } } /*for(i=1;i<=n;i++){ for(j=1;j<=n;j++) printf("%4d ",ind[i][j][1]); printf("\n"); } printf("\n"); for(i=1;i<=n;i++){ for(j=1;j<=n;j++) printf("%4d ",ind[i][j][0]); printf("\n"); } printf("\n");*/ long long min=INF,k; for(i=1;i<=n;i++){ if((k=raw_ind[i]+find_ans(i,i))<min) min=k; //printf("with %d min is %ld\n",i,k); } printf("%lld\n",min); } return 0; }
int main(){ FILE* fin = fopen("camelot.in" ,"r"); FILE* fout = fopen("camelot.out","w"); #ifdef D fout = stdout; #endif char c; int i,j,m,n; fscanf(fin,"%i %i\n",&R,&C); fscanf(fin,"%c %i\n",&c,&king_y); king_x = c -'A';king_y--; while(!feof(fin)){ c = fgetc(fin); if(feof(fin))break; if( c == ' ' || c == '\n' )continue; knight_x[n_knight] = c - 'A'; fscanf(fin,"%i",&knight_y[n_knight]); knight_y[n_knight++] --; } for(i=0;i<26;i++)for(j=0;j<30;j++){ for(m=0;m<26;m++)for(n=0;n<30;n++) dist[i][j][m][n] = INF; dist[i][j][i][j] = 0; } /* do bfs */ for(i=0;i<C;i++)for(j=0;j<R;j++) bfs_knight(i,j); bfs_king(); /* sum all */ for(m=0;m<n_knight;m++) for(i=0;i<26;i++)for(j=0;j<30;j++) d_all[i][j] += dist[knight_x[m]][knight_y[m]][i][j]; #ifdef Ds p_map(dist[knight_x[0]][knight_y[0]]); p_map(d_all); #endif find_ans(); fprintf(fout,"%i\n",mi_s); fclose(fin); fclose(fout); return 0; }
long long find_ans(long i,struct node *ptr) { if(i==ptr->lc) return ptr->info; else if(i<ptr->lc) return find_ans(i,ptr->lchild); else return find_ans(i,ptr->rchild); }