问题标题: 酷町堂:1210为什么我运行时错误?

0
1
已解决
刘凯南
刘凯南
高级守护
高级守护
​
#include<bits/stdc++.h>
using namespace std;
int k[2000],num,f[2000],n;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>k[i];
    for(int i=1;i<=n;i++)
        num+=k[i];
    int m=num/2;
    for(int i=1;i<=n;i++)
        for(int j=m;j>=k[i];j--)
            f[j]=max(f[j],f[j-k[i]]+k[i]);
    cout<<abs(num-f[m]*2);
}

​

 


1
已采纳
陆麟瑞
陆麟瑞
资深天翼
资深天翼

f[2000]

改为

f[200000]

你试试。

数组定义小了。

2
李汉魁
李汉魁
中级光能
中级光能

用万能头文件可能导致编译超时!!!

1
1
陆姗姗
陆姗姗
资深守护
资深守护

仔细看题目的输入描述即可知道

输入描述 Input Description

第一行输入西瓜数量N (1 ≤ N ≤ 20)
第二行有N个数,W1, …, Wn (1 ≤ Wi ≤ 10000)分别代表每个西瓜的重量

 

因为1 ≤ N ≤ 20 ,所以你的数组k的范围比20稍大就可以了

因为1 ≤ Wi ≤ 10000,所以你的数组f的范围需要比10000*20/2稍大,你的f的范围太小了

1
杨陈卓
杨陈卓
新手天翼
新手天翼

数组都要定义到200000

劝你最好不要用万能头文件

把万能头文件去掉,加上:

#include<iostream>
#include<cmath>

这两个头文件,我刚试的,100分

最后祝你提交愉快!

杨陈卓在2018-02-08 11:41:33追加了内容

定义n,f[50001],a[50001],v

输入n

    for(int i=1;i<=n;i++) 
    {
        cin>>a[i];
        v+=a[i];
    }
    int v1=v;
    v/=2;
    for(int i=1;i<=n;i++)
    {
        for(int j=v;j>=a[i];j--)
        {
            f[j]=max(f[j],f[j-a[i]]+a[i]);
        }
    }
    cout<<v1-f[v]*2;

这是另外一种思路

1
李乐凡
李乐凡
新手光能
新手光能

1.最好不要用万能头文件

2.数组定义小了

1
朱智霖
朱智霖
新手守护
新手守护

首先个人推荐不要用万能头文件,而且,在我的C++中都可以运行,肯定是你的c++出错了,你把错误图片发给我,我在继续解答

1
刘凯南
刘凯南
高级守护
高级守护

刘凯南在2018-02-07 19:11:51追加了内容

 

酷町堂

 

1210   西瓜分配

 

Runtime Error:0分

 

 

刘凯南的测评结果:

 

测试点#1测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#2测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#3测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#4测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#5测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#6测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#7测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#8测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#9测评结果 : Runtime Error时间 : 0ms偷看一下数据测试点#10测评结果 : Runtime Error时间 : 0ms偷看一下数据

 

我的提交(cpp):

#include<bits/stdc++.h>
using namespace std;
int k[10000],num,f[10000],n;
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>k[i];
    for(int i=0;i<n;i++)
        num+=k[i];
    int m=num/2;
    for(int i=0;i<n;i++)
        for(int j=m;j>=k[i];j--)
            f[j]=max(f[j],f[j-k[i]]+k[i]);
    cout<<abs(num-f[m]-f[m]);
}
0
我要回答