修改了 KnapSack 运行时错误

Posted

技术标签:

【中文标题】修改了 KnapSack 运行时错误【英文标题】:modified KnapSack runtime error 【发布时间】:2014-07-04 06:49:19 【问题描述】:

我在解决 codechef 上的程序时遇到问题,这是背包问题的修改版本.. 1.在这里我必须找到所有可能重量的最大成本..1

   #include<bits/stdc++.h>
   using namespace std;
   #define  ll long long
   ll _max(ll a,ll b)return a>b?a:b;
   ll sol[200009];
   void knapsack(ll W,ll val[],ll wt[],ll n,ll sol[])
   
      ll i,w;
      ll K[n+1][W+1];


         for(ll i=0;i<=n;i++)
         
              for(ll w=0;w<=W;w++)
              
                if(i==0 || w==0)
                K[i][w]=0;
                else
                
                   if(wt[i-1]<=w)
                   K[i][w]=max(val[i-1]+K[i-1][w-wt[i-1]],K[i-1][w]);
                   else
                   K[i][w]=K[i-1][w];
                
              
         
         for(int j=0;j<W;j++)
         
             sol[j]=K[n][j+1];
             printf("%lld ",sol[j]);
         

    

    int main()
    
        ll n;
        scanf("%lld",&n);
        ll val[n];
        ll wt[n];

        ll sum =0;
        for(ll i=0;i<n;i++)
        
           scanf("%lld",&wt[i]);
           scanf("%lld",&val[i]);
           sum+=wt[i];
        

        knapsack(sum, val, wt, n,sol);
        return 0;
    

【问题讨论】:

你知道这个错误的文本或编号吗? 现在是学习如何使用调试器的好时机。 能说说codechef上的问题吗?? codechef.com/COOK47/problems/KNPSK 【参考方案1】:

好吧,我不保证这会给你一个交流电

您在编写解决方案时忽略了约束

3 ≤ N ≤ 100000;

1 ≤ W ≤ 2, for each item;

1 ≤ C ≤ 109, for each item.

你的矩阵

long long  K[n+1][W+1];

不会被分配,因为n的最大值是100000并且

W = sum = weight[i] * n 最高可达 2*100000

相当于分配 K[100000][200000] 会产生运行时错误

【讨论】:

以上是关于修改了 KnapSack 运行时错误的主要内容,如果未能解决你的问题,请参考以下文章

运行Loadrunner脚本时,运行错误,提示如下:(见补充) 求高手怎么解决

Coreldraw X4 为啥每次打字时会出现运行错误?你的这个问题解决了吗?

IDEA中运行Tomcat出错

GG运行脚本出错,求助各路大神解惑!~!~

总结Unity 初学者容易犯的编译与运行时错误

运行时错误:SWIG std::function 调用失败,在 azure databricks 中