【问题标题】:sigbart error! can't find out whysigabrt 错误!不知道为什么
【发布时间】:2015-07-16 12:56:36
【问题描述】:

我试图解决名为 mchef (http://www.codechef.com/problems/MCHEF) 的代码厨师中的一个问题。我的解决方案http://www.codechef.com/viewsolution/7488621 不断出现错误。我不知道是什么错误。

【问题讨论】:

  • 你能编辑你的帖子,让它没有任何链接吗?我的意思是您应该在不访问其他网站的情况下明确提出问题(这样做的原因有很多)。

标签: stl dynamic-programming


【解决方案1】:

你错了!使用 new 分配的所有数组都使用

从堆中释放
delete []Array;

试试这个代码!

#include <bits/stdc++.h>

using namespace std;

long long max(long long x,long long y)
{
    return (x>y)?x:y;
}

  long long knapSack(unsigned int W, long long wt[], long long val[], unsigned int  n)
{
   long long i, w;
   long long K[n+1][W+1];

   // Build table K[][] in bottom up manner
   for (i = 0; i <= n; i++)
   {
       for (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];
       }
   }

   return K[n][W];
}
int main()
{
    unsigned int t,n,k,m,l,r,M[5000][20],x,temp;
    long long *arr,sum=0,*v,i,*s,*c,j;
    unsigned int *idx;
    vector<int> *L,*R;
    set <long long> iset;
    cin>>t;
    while(t--)
    {
        cin>>n>>k>>m;
        sum=0;
        arr= new long long[n];
        s= new long long[n];
        v= new long long[n];
        c=new long long[m];
        for(i=0;i<n;i++)
        {
            cin>>arr[i];
            v[i]=-1*arr[i];
            sum+=arr[i];
            s[i]=1000000;
        }

        L=new vector<int>[n];
        R=new vector<int>[n];
    for(i=0;i<m;i++)
    {
        cin>>l>>r>>temp;
        L[l-1].push_back(i);
        R[r-1].push_back(i);
        c[i]=temp;
    }

    for(i=0;i<n;i++)
    {
        for(j=0;j<(int)L[i].size();j++)
        {
            iset.insert(c[L[i][j]]);
            //cout<<1;
        }
        s[i]=*(iset.begin());
        for(j=0;j<(int)R[i].size();j++)
        {
            iset.erase(c[R[i][j]]);
//          cout<<(int)R[i].size()-1<<" ";
        }
    }
    // for(i=0;i<n;i++)
    // {
    //  cout<<s[i]<<endl;
    // }

//reduces to knapsack problem   
    cout<<sum+knapSack(k,s,v,n)<<endl;
    delete []arr;
    delete []s;
    delete []v;
    delete []L;
    delete []R;
    delete []c;

    }

}  

【讨论】:

    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2015-11-10
    相关资源
    最近更新 更多