下面的代码是我解决这个问题的尝试。我使用了基于1的索引。我无法找出错误。我试着调试代码,但没有帮助。我已经被困了两天了。请帮忙。
#include <iostream>
#include <limits.h>
using namespace std;
int main()
{
int n,W;
cin>>n>>W; // no. of elements and maxm. Weight
int v[n+1],w[n+1]; // array for value and weight
int dp[n+1][100001]; // dp array with size n+1 and 10^5+1 (for v max value 1000, and for n 100)
// Initializing arrays
v[0]=INT_MAX; w[0]=INT_MAX;
for (int i = 0; i < n+1; ++i)
{
for (int j = 0; j < 100001; ++j)
{
dp[i][j]=INT_MAX;
}
}
for (int i = 1; i < n+1; ++i){
cin>>w[i]>>v[i];
}
dp[1][0]=0; // for 0 value, no value for weight
dp[1][v[1]]=w[1];
for (int i = 2; i < n+1; ++i)
{
dp[i][0]=0;
for (int j = 1; j < 100001; ++j)
{
dp[i][j]=dp[i-1][j]; // excluding the element
if(j-v[i]>=1){
dp[i][j]=min(dp[i][j],w[i]+dp[i-1][j-v[i]]); // min of including and excluding element
}
}
}
// to find the max value for which weight is <=W
for(int i=100000; i>=1; i--){
if(dp[n][i]<=W){
cout<<i; break;
}
}
return 0;
}
您的代码存在一些问题:
INT_MAX
dp[1][v[1]]=w[1];
uneeded行对于(int j=1;j<100001;++j)
j
为0是有效权重,但如果(j-v[i]>=1){
同上以下是一个固定的版本:
#include <iostream>
#include <limits.h>
#define ll long long
using namespace std;
int main()
{
int n,W;
cin>>n>>W; // no. of elements and maxm. Weight
ll v[n+1],w[n+1]; // array for value and weight
ll dp[n+1][100001]; // dp array with size n+1 and 10^5+1 (for v max value 1000, and for n 100)
// Initializing arrays
v[0]=1e17; w[0]=1e17;
for (int i = 0; i < n+1; ++i)
{
for (int j = 0; j < 100001; ++j)
{
dp[i][j]=INT_MAX;
}
}
for (int i = 1; i < n+1; ++i){
cin>>w[i]>>v[i];
}
dp[0][0]=0; // for 0 value, no value for weight
for (int i = 1; i < n+1; ++i)
{
dp[i][0]=0;
for (int j = 0; j < 100001; ++j)
{
dp[i][j]=dp[i-1][j]; // excluding the element
if(j-v[i]>=0){
dp[i][j]=min(dp[i][j],w[i]+dp[i-1][j-v[i]]); // min of including and excluding element
}
}
}
// to find the max value for which weight is <=W
for(int i=100000; i>=0; i--){
if(dp[n][i]<=W){
cout<<i; break;
}
}
return 0;
}
对于python我是新手,我正在做leetcode问题94,二叉树顺序遍历。给定二叉树的根,返回对其节点值的inorder遍历。 但我还是不明白它为什么有用。在之后,在递归过程中,res变量不会被重新分配给[]吗?或者res变量在不同的递归中应该是不同的变量吗?
我正在努力解决Leetcode问题489。机器人房间清洁器使用回溯。具体来说,我尝试在四个方向中的每一个方向移动机器人,如果四个方向都被阻塞或清理,则返回。 下面的代码不起作用,我正试图用这个简单的示例对其进行调试: 其中1表示机器人可以访问单元,0表示单元被阻止。机器人从这个初始位置开始: 在我运行代码后,机器人只清洁了网格的右侧部分(c-清洁,d-左脏): 它似乎正确地返回到单元格[0,1],
这是一个骇人听闻的问题:爱丽丝是一个幼儿园老师。她想给班上的孩子们一些糖果。所有的孩子坐成一行(他们的位置是固定的),每个人根据他(她)在班上的表现有一个评级分数。爱丽丝想给每个孩子至少一颗糖。如果两个孩子挨着坐,那么评分较高的那一个必须得到更多的糖果。爱丽丝想省钱,所以她需要尽量减少给孩子们的糖果总数。 测试数组:n=10,n个元素为[2 4 2 6 1 7 8 9 2 1]。我得到的答案是18
在维基百科中,背包的算法如下: 我在网上找到的所有例子的结构都是一样的<我无法理解的是,这段代码是如何考虑到最大值可能来自较小的背包这一事实的?E、 如果背包容量为8,那么最大值可能来自容量7(8-1)<我找不到任何逻辑来考虑最大值可能来自较小的背包。这是错误的想法吗?
下面是问题的链接:SPOJ-ACTIV 我想出了这个问题的重现如下: 其中next()查找具有开始时间的活动的索引 这是我的java解决方案,虽然它通过了SPOJ工具包的许多测试用例,但是它确实为一些提供了WA。我的概念/解决方案有什么问题?
我是这里的初学者,这个代码在理论上应该是可行的,为你们这些很棒的家伙们帮我干杯! 13195的质因数是5、7、13、29。 600851475143的最大质因数是什么? 欧拉问题3