Automatically turning a water valve on and off

One Arduino UNO has several IO lines (12-20 depending how you count) to control valves. but you can easily multiplex them e.g. - Centipede Shield V2 - Macetech Electronics Store

So for ~1 uno and 2 centipede shields (~70$) you can control 100+ valves. Assuming you have 2 valves per plant this costs $1.40 per plant ex valves cables and wires and power supply.

Valves are different in price but as you can see the controlling unit is not the price. Assume they costs $5 a piece and you need $5 for cabling the costs will go around $20 per plant. But that is only a rough estimate. You might need $10-20 for an RTC too to keep the time synced.

WRT the program

An UNO has enough RAM to hold a table with 10 feeding times for 100 plants. The trick is to use a fixed duration per feed. With 10 feeds that is easy to be done.

uint8_T plants[100][10]; // == 1000 bytes

possible schema:
a feeding time is a number between 0..239. 24 hour in 240 parts ==> can start every 6 minutes e.g. for 10 seconds.
the number 255 can be used for NOFEED. the number 240-254 are free for other purposes.

a more complex schema could be:
uint8_T plants[100][5][2]; // == 1000 bytes
==> 5 feeding times per day, but per feeding time you have a duration byte 0..255 seconds.

every feeding time extra would imply 200 bytes extra.
uint8_T plants[100][6][2]; // == 1200 bytes

Another way to handle the feeding schema would be a file on an SD card. Then you don't need to declare the array in front you just read the feeding scheme from disk. And you can edit the scheme on your PC and reinsert it in the Arduino.

Hopes this helpes.