資源簡介
關于動態規劃投資問題的Java代碼實現,幫助了解具體算法的實現過程

代碼片段和文件信息
package?投資動態規劃;
public?class?Investment?{
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
int?f[][]={{0000}
???????????{110220}
???????????{1251021}
???????????{13103022}
???????????{14153223}
???????????{15204024}};
int?[]q=Investment2(f54);
//測試f[][]輸出?,觀察下標
for(int?i=0;i {
for(int?j=0;j {
System.out.print(“f[“+i+“][“+j+“]=“+?f[i][j]+“\t“);
}
System.out.println();
}
System.out.println();
//測試向量輸出
for(int?i=0;i {
System.out.println(“第“+(i+1)+“個項目投:“+q[i]+“萬元?????“);
}
}
static?int?[]?Investment2(int?[][]fint?mint?n)
{
//m=5n=4
int?[][]F=new?int[m+1][n];//F[6][4]
int?[][]s=new?int[m+1][n];
//計算F[][]
for(int?k=1;k<=n;k++)//投資項目?(0->3)?變成?(1->4)
{
for(int?x=1;x<=m+1;x++)//投資錢數?(0->5)
{
if(k==1)
{
F[x-1][k-1]=f[x-1][k-1];
s[x-1][k-1]=x-1;
}
else
{
F[x-1][k-1]=F[x-1][k-2];//把?(0,i)放到F的第k-1列
for(int?i=1;i<=x;i++)//x(1->5)
{
int?t=f[i-1][k-1]+F[x-i][k-2];
if(t>F[x-1][k-1])
{
F[x-1][k-1]=t;
s[x-1][k-1]=i-1;
}
}
}
}
}
//計算返回的q向量
int?[]q=new?int?[m+1];
for(int?i=0;i {
int?q1=F[i][n-1];
q[i]=q1;
}
int?t=Max(q);//找到最后一列的最大值
int?[]p=new?int?[n];//最后返回的向量每個項目的投資數
for(int?j=n-1;j>=0;j--)
{
int?o=s[t][j];
p[j]=o;
t=t-o;
}
???????//F[][]和s[][]測試輸出
for(int?i=0;i {
for(int?j=0;j {
System.out.print(“F[“+i+“][“+j+“]=“+?F[i][j]+“?“+s[i][j]+“\t“);
}
System.out.println();
}
System.out.println();
return?p;
}
static?public?int?Max(int[]?m)//X找最大值返回下標X??->應該重全部二維數組來找
{
int?max=m[0];
int?t=0;
for(int?i=1;i {
if(max {
max=m[i];
t=i;
}
}
return?t;
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2214??2017-11-11?10:43??Investment.java
-----------?---------??----------?-----??----
?????????????????2214????????????????????1
- 上一篇:中國最全城市xm
l文件 - 下一篇:最長公共子序列java實現
評論
共有 條評論