In response to growing evidence linking food insecurity and poor nutrition to an increased risk of chronic health problems, such as diabetes and malnutrition, food bank personnel and policy makers must proactively seek new policies and practices that combat food insecurity and ensure that food bank systems function equitably and efficiently. We develop a framework for optimizing resource allocation by food banks among the agencies they serve. Our framework explicitly considers measures of the effectiveness and efficiency of the resource allocation problem faced by food banks, and it implicitly considers an equity performance measure. We measure effectiveness based on the nutritional value of the allocation decisions, efficiency as the utility of the agencies served, and equity as fairness in the allocation of food among those agencies. Specifically, we develop a dynamic programming model in which the primary decision is how much of each product to allocate/distribute to each agency. To deal with the high-dimensional state space in the dynamic program, we construct approximations to the value function that are parameterized by a small number of parameters. Computational experiments using real-world data obtained from a food bank in New York State, which serves about 19,000 individuals per week, are used to evaluate the performance of our approach. When compared against the policy currently in use, our algorithm demonstrated a 7.73% improvement in total utility. Furthermore, when compared against the offline model, where randomness is revealed upfront, the gap between our algorithm and the offline model was less than 9.50%. On the effectiveness side, our framework demonstrated a 3.0% improvement in the nutrition of the served population.