Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java dp[!t][val]用于从数组中跳过部件_Java_C++_Dynamic Programming_Knapsack Problem - Fatal编程技术网

Java dp[!t][val]用于从数组中跳过部件

Java dp[!t][val]用于从数组中跳过部件,java,c++,dynamic-programming,knapsack-problem,Java,C++,Dynamic Programming,Knapsack Problem,考虑cpp中的以下代码段。这是取自动态规划教程 它主要用于空间优化背包问题 for(int i=1;i<=a;i++) { int t = a%2; for(int j=0;j<1100000;j++) dp[t][j] = inf; for(int j=0;j<1100000;j++){ dp[t][j] = min(dp[t][j],dp[!t][j-v[i-1]]+w[i-1]);//!t part is for skipping

考虑cpp中的以下代码段。这是取自动态规划教程

它主要用于空间优化背包问题

for(int i=1;i<=a;i++)
{
    int t = a%2;
    for(int j=0;j<1100000;j++) dp[t][j]  = inf;
    for(int j=0;j<1100000;j++){
        dp[t][j] = min(dp[t][j],dp[!t][j-v[i-1]]+w[i-1]);//!t part is for skipping the current
    }
}

for(inti=1;i只需将
!t
替换为
t^1
1-t
(只要你觉得更可读,效果都一样)。这就是你需要做的一切

解释 Java支持此代码段中显示的所有整数操作:


int t=a%2;
只需将
!t
替换为
t^1
1-t
(只要你觉得更可读,效果都一样)。这就是你需要做的一切

解释 Java支持此代码段中显示的所有整数操作:


int t=a%2;
dp[!t]
没有跳过特定的元素。如果
t
0
,那么
dp[!t]
dp[1]
,否则它是
dp[0]
。唯一有意义的方法(假设
dp
是一个数组,而不是一些课时)是
dp
t[2]
array。然后,由于
t
在这里总是0或1,
dp[t]
是这两行中的一行,而
dp[!t]
是另一行。1-t有什么问题吗?如果你想要按位求反,你可以使用
~
1-t给出arrayindexoutofbounds异常你可以检查自己
dp[!t]
不是跳过特定的元素。如果
t
0
,那么
dp[!t]
dp[1]
,否则它是
dp[0]
。唯一有意义的方法(假设
dp
是一个数组而不是某个类时间)是
dp
t[2]
array。然后,由于
t
在这里总是0或1,
dp[t]
是这些行中的一行,并且
dp[!t]
是另一个。1-t有什么问题吗?如果你想要按位求反,你可以使用
~
1-t提供ArrayIndexOutOfBoundsException你可以自己检查谢谢你的回答。但是我特别问了!t部分。我在!t中尝试了t^1和1-t。但是它不起作用。它给我ArrayIndexOutOfBoundsException,因为它小于0@AashishPawar和我在这个答案中解释了这一部分。如果你遇到了这个错误,要么你粘贴的代码不是你正在运行的代码,要么a是否定的,在这种情况下(正如我在回答中所说的),t将是-1。C代码在那里也没有多大意义。在这种情况下,它可能充当't==0?1:0'。谢谢你的回答。但我特别询问了!t部分。我在!t中尝试了t^1和1-t。但它不起作用。它给我ArrayIndexOutOfBoundsException,因为它小于0@AashishPawar我在这篇文章中解释了这一部分回答。如果你遇到了这个错误,要么你粘贴的代码不是你正在运行的代码,要么a是负数,在这种情况下(正如我在回答中所说的),t将是-1。C代码在这里也没有太多意义。在这种情况下,它可能充当't==0?1:0'。