Para eso debes usar memoria dinamica con los operadores new y delete.
Haces el: cin>>N; como quieres
...Luego reservas memoria con new:
int *datos = new int[N];
Utilizas el arreglo normalmente:
datos[0] = 18;
datos[7] = 400; // suponiendo que datos tenga al menos un tamaño de 7 o mas claro ;)
Antes de terminar el programa tienes que liberar memoria.
delete[] datos;
Listo!
http://c.conclase.net/curso/?cap=013b
Espero que te sirva de ayuda.