问题标题: 酷町堂:1210 西瓜分配 Runtime Error:0分

0
0
已解决
曾凡一
曾凡一
新手光能
新手光能

点击此处跳转题库

1210   西瓜分配

题目描述 Description

已知有一堆西瓜,请帮忙将这一堆西瓜分成两堆,已知每个西瓜的重量,现在要求分成两堆的西瓜的重量的差最小

输入描述 Input Description

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

输出描述 Output Description

输出分成两堆后的质量差

样例输入 Sample Input

 

5
5 8 13 27 14

样例输出 Sample Output

 

3

 

 

我的代码:

 

 

#include<iostream>
using namespace std;
int n,f[1010],a[1010],v;
int main()
{
    cin>>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;
    return 0; 
}

 

 

图片:

 

 

求各路大神赐下错误原因

 


1
已采纳
陆姗姗
陆姗姗
资深守护
资深守护

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

输入描述 Input Description

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

 

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

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

 

陆姗姗在2018-02-08 11:15:33追加了内容

数组f的范围需要比10000*20/2稍大

因为每个最重10000,最多有20个,所以sum最重为10000*20,而我们要对sum/2进行计算,所以f的范围比10000*20/2稍大即可

0
高翊天
高翊天
初级守护
初级守护

数组定义太小,应为10010

0
曾凡一
曾凡一
新手光能
新手光能

老铁,没变化呀

提交还是0分

0
王子凡
王子凡
高级光能
高级光能

a[200010]   a[10010]我也试过不行

0
吴峻逸
吴峻逸
初级守护
初级守护

把所有数组开到50001就对了,相信我!

0
0
我要回答