资源简介
关于动态规划投资问题的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实现
评论
共有 条评论