java中动态规划的最小代价

java中动态规划的最小代价,java,dynamic,Java,Dynamic,我正在做一个项目,我必须用动态规划找到最小成本。我们填充了一个数组A[n*m]。我们还有另一个数组b[n*m]。我们必须填充另一个c(n*m)数组,其中c(i,j)填充了 for (i=1 to m) a[i,j]+B[j,k]+c[i-1,k] 比如我们有 这是我的代码: for (int t = 1; t < n; t++) { for (int y = 0; y < m; y++) { int min = 9999555; for (int k = 0; k

我正在做一个项目,我必须用动态规划找到最小成本。我们填充了一个数组
A[n*m]
。我们还有另一个数组
b[n*m]
。我们必须填充另一个
c(n*m)
数组,其中
c(i,j)
填充了

for (i=1 to m) 
  a[i,j]+B[j,k]+c[i-1,k]
比如我们有

这是我的代码:

for (int t = 1; t < n; t++) {
 for (int y = 0; y < m; y++) {
  int min = 9999555;
  for (int k = 0; k < m; k++) {
   if ((a[t][y] + b[y][k]) < min) {
    min= a[t][y] + b[y][k] + c[t - 1][k];
    }
   }c[t][y] += min;
  }
 }
 for (int u = 0; u < n; u++) {
        for (int z = 0; z < m; z++) {
            System.out.print(c[u][z]+" ");
        }
        System.out.println();
    }
for(int t=1;t
c
的第一列应与
a
的第一列相同。 例如:
c[2,1]
is
min{A[2,1]+c[1,1]+b[1,1],A[2,1]+c[1,2]+b[2,1],A[2,1]+c[1,3]+b[3,1]}

我想问你我的代码是否是动态规划的正确方法

让我们把事情说清楚:
A[i,j]是在vmj上运行进程i的成本

状态C[i,j]意味着在VM“0..j”上运行进程“0..i”的最低成本

现在让我们假设没有B成本数组

目标是状态C[n,m],这是在VM“0..m”上运行进程“0..n”的最小成本。
我们可以从以下地点到达C[i,j]国:

  • 状态C[i-1,j],这意味着VMs“0..j”将运行额外的进程“i”,并考虑在VMs“0..j”上运行进程“i”的成本,即总和(a[i,k]),其中k=0..j
    因此,成本为C[i-1,j]+和(a[i,k]),其中k=0..j

  • 状态C[i,j-1],这意味着进程“0..j”将在一个或多个VM“j”上运行(因此总计“0..j”),并考虑在VM“j”上运行进程“0..i”的成本,即总和(a[k,j]),其中k=0..i
    因此,成本为C[i,j-1]+和(a[k,j]),其中k=0..i

  • 通过取这两个值中的最小值,我们得到C[i,j]

    到目前为止你同意吗

    更新。
    假设流程和VM编号从0开始:

    基本情况:

    for(int j=0; j < m; j++)  
         c[ 0 ][ j ] = a[ 0 ][ j ];
    
    for(int j=0;j
    DP回路:

    for (int i = 1; i < n; i++) 
    {
     for (int j = 0; j < m; j++) 
     {
         int min = Integer.MAX_INT;
         for (int k = 0; k < m; k++) 
          {
            if ((a[ i ][ j ] + b[ k ][ j ] + c[ i-1 ][ k ]) < min) 
    
                 min= a[ i ][ j ] + b[ k ][ j ] + c[ i-1 ][ k ];
    
          }//try every VM
    
         c[ i ][ j ] = min;
    
      }//for every VM
    }//for every process
    
    for(int i=1;i
    与动态程序员一起访问云计算公司正在提供像亚马逊一样的计算云计算,他们都是关于虚拟人(VM,虚拟机)的,而虚拟人反过来会给其他人适当的总使用时间报酬。流程中有许多草图,每个草图都不同,例如,一个虚拟机A可能优于另一个虚拟机成本B以执行流程使用更多CPU,而在运行dsc的流程中,B优于A。也可能有一个更昂贵的C系统在性能上优于a和B(但它更昂贵)。虚拟机设计的预测是许多财政资源。这个问题是针对具体工作而提出的。我们有一个深入的过程,包括N个链形式的实验:Δ1→ Δ2 → Δ3 → ..... → ΔΝ. 结果表明,Δ1的结果作为Δ2的输入,Δ2的结果作为Δ3的输入,依此类推。我们还拥有M个虚拟图片设施。作为一个条目,我们还有两个表。man是NXM,导致在一种类型的虚拟机中运行事务的总成本。dignitaries表是MXM,它支付将数据发送到另一个表的费用。示例输入如下:在特定示例中,嵌入式流程有4个场景,3个VM模式可用。第一个执行4个例程,成本分别为5、7、7和2。它还与其他两类技术人员进行通信,费用分别为7和2。待实现的动态规划算法:待填充的算法表成本NXM,其中每个成本单元(i,j)显示流程的最低总体成本,直到我住在j上时为止。为了执行移动生活,考虑到通信成本,i-1的结果可以转移到其他社区或从其他社区转移。在上面的示例中,此表具有等效性,这实际上意味着成本较低的消光为15,并且在最后一次操作是虚拟机时实现:

    问题本身与动态规划无关,因为您尚未定义问题陈述(根据您的话)目的是通过dyn.编程来解决。我们只看到您试图通过数组A和B填充数组C问题的症结是:我们有N个步骤(进程)和M种类型的虚拟机VM。阵列A需要在一种类型的VM中运行1个进程。第二个阵列bm*M需要从一种类型的VM运行一个进程到另一种类型的VM。在我编写的示例中,我们有4个进程和3种类型的VM。第一个VM运行4个进程,成本分别为5、7和2。还可以与其他类型的虚拟机进行通信,成本分别为7和2。请更清楚地定义A[i,j]、B[i,j]和C[i,j]的含义。A[i,j]=在vmj上运行进程i的成本。C[i,j]=在虚拟机上运行进程0..i的成本0..j(正确吗?)B[i,j]=?A[i,j]=在虚拟机上运行进程i的成本j.C[i,j]=在虚拟机0..j上运行进程0..i的成本,这是由C[i-1,j]+进程A[i,j]的成本+在同一虚拟机上运行的成本或向另一虚拟机发送数据的成本(B[j,k]@乔治,现在你能更清楚地解释一下B[i,j]的目的吗?因为我还不明白这一点。我会加上t