1. 问题
设m元钱,n项投资,函数fi(x)表示将x元投入第i项项目所产生的效益,i=1,2,…,n。
问:如何分配这m元钱,使得投资的总效益最高?
2. 解析
注意:要满足优化原则,这里未给出证明!
3. 设计
/*给出函数*/
public void get_Invest(int[][] items,int total) {
if(items==null||items.length<=0)return;
int[][]flag=new int[items.length][items[0].length];
int[][]invest=new int[items.length][items[0].length];
for(int i=1;i<flag.length;i++) {
flag[i][0]=items[i][0];
}
for(int i=1;i<invest.length;i++) {
invest[i][0]=1;
}
int row=items.length;
int col=items[0].length;
for(int i=1;i<col;i++) {
for(int j=1;j<row;j++){
int max=0;
for(int k=0;k<=j;k++) {
if(items[k][i]+flag[j-k][i-1]>=max) {
max=items[k][i]+flag[j-k][i-1];
invest[j][i]=k;
}
}
flag[j][i]=max;
}
}
}
4. 分析
时间复杂度:
本应为
但我给出的函数复杂度略高