方程组求解 比较有挑战性,盼高手帮忙
有一根料长   6000   mm,现在要分成以下方案   
 //1589   、560、2376、1600、2100               每根材料的长度 
 //3                     10         2               3                  2                  根数   
 求怎么分这6000mm      利用率最高; 
 如:   
 //1589   、560、2376、1600、2100               每根材料的长度 
 //0                     2         2               0                  0            根数   
 这个分法的利用率达到98%   
 我是这样解的: 
 using   System;   
 namespace   ConsoleApplication1 
 { 
 	///    <summary>  
 	///   Class1   的摘要说明。 
 	///    </summary>  
 	class   Class1 
 	{ 
 		///    <summary>  
 		///   应用程序的主入口点。 
 		///    </summary>  
 		[STAThread] 
 		static   void   Main(string[]   args) 
 		{ 
 //			//1589   、560、2376、1600、2100 
 //			//3                     10         2               3                  2 
 			int   sum1   =   0; 
 			int   i   =   0,   j   =   0,   m   =   0,   n   =   0,   x   =   0; 
 			int   x1,   x2,   x3,   x4,   x5;     
 			for   (m   =   0;   m    <   3;   m++) 
 			{ 
 				for   (x   =   0;   x    <   3;   x++) 
 				{ 
 					for   (n   =   0;   n    <   4;   n++) 
 					{ 
 						//int   sum1=1589*i+560*j+2376*m+1600*n+2100*x; 
 						for   (i   =   0;   i    <   4;   i++) 
 						{ 
 							for   (j   =   0;   j    <   11;   j++) 
 							{ 
 								sum1   =   1589*i   +   560*j   +   2376*m   +   1600*n   +   2100*x   +i*10+j*10+m*10+n*10; 
 								if   (sum1    <=   6000) 
 								{ 
 									x1   =   i; 
 									x2   =   j; 
 									x3   =   m; 
 									x4   =   n; 
 									x5   =   x;   
 									Console.Write( "&&&&&&&&&&&&&&&&&&&& "); 
 									Console.Write(string.Format( "\n ")); 
 									Console.Write(string.Format( "1589x1:{0}\n ",   i)); 
 									Console.Write(string.Format( "560x2:{0}\n ",   j)); 
 									Console.Write(string.Format( "2376x3:{0}\n ",   m)); 
 									Console.Write(string.Format( "1600x4:{0}\n ",   n)); 
 									Console.Write(string.Format( "2100x5:{0}\n ",   x)); 
 									Console.Write(string.Format( "sum1:{0}\n ",   (double)sum1)); 
 									Console.Write(string.Format( "百分比:{0}%\n ",   (double)sum1/(double)6000)); 
 									Console.Write( "========== "); 
 								} 
 								else 
 								{ 
 									continue; 
 								} 
 							} 
 						} 
 					} 
 				} 
 			} 
 		} 
 	} 
 }   
 但这个并不是一个通用的解法,如我们还要分1700(3),1800(2),2500(2)   如按上面的写法就将有8个FOR   了,这根本没有通用性可言; 
 希望得到更位仁兄的帮助