Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #define MAX 1234567890
- using namespace std;
- int abs(int n)
- {
- return (n<0)?(-n):n;
- }
- struct comp
- {
- int x,y,z; //position
- int m,k,c; //monitor keyboard cpu
- } com[10];
- int n,m,ans = MAX;
- void findmin(int x, int y, int z, int d, int mo,int ky, int c,int visit[])
- {
- if(mo==0 && (ky==0 && c==0))
- {
- if(ans > d)ans = d;
- return;
- }
- int i,cal,*visited = new int[m];
- for(i=0; i<m; i++)
- visited[i] = visit[i];
- for(i=0; i<m; i++)
- if(!visited[i])
- visited[i] = 1,cal = abs(com[i].x-x)*abs(com[i].x-x)+abs(com[i].y-y)*abs(com[i].y-y)+abs(com[i].z-z)*abs(com[i].z-z),findmin(com[i].x,com[i].y,com[i].z,d+cal,(com[i].m>=mo)?0:mo-com[i].m,(com[i].k>=ky)?0:ky-com[i].k,(com[i].c>=c)?0:c-com[i].c,visited),visited[i] = 0;
- }
- int main()
- {
- int x,y,z,i;
- scanf("%d %d %d %d %d",&n,&x,&y,&z,&m);
- int* visit = new int[m];
- for(i=0; i<m; i++)
- scanf("%d %d %d %d %d %d",&com[i].x,&com[i].y,&com[i].z,&com[i].m,&com[i].k,&com[i].c),visit[i] = 0;
- findmin(x,y,z,0,n,n,n,visit);
- printf("%d",ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement