C++题目,答对者追加分!

来源:百度知道 编辑:UC知道 时间:2024/05/09 09:46:05
帮我看看错在哪

装箱问题
描述 Description
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。

输入格式 Input Format
第一行,一个整数,表示箱子容量;
第二行,一个整数,表示有n个物品;
接下来n行,分别表示这n个物品的各自体积。

输出格式 Output Format
一个整数,表示箱子剩余空间。

#include<fstream>
using namespace std;
ifstream fin ("1133.in");
ofstream fout ("1133.out");
main ()
{
int v,n;
fin>>v>>n;
int a[n+1][v+1],b[n+1];
for (int i=1;i<=n;i++)
fin>>b[i];
for (int i=0;i<=n;i++)
for (int j=0;j<=v;j++)
a[i][j]=0;
for (int i=1;i<=n;i++)
{for (int j=b[i];j<=v;j++)
{
if (a[i-1][j]>a[i-1][j-b[i]]+b[i])
a[i][j]=a[i-1][j];
else a[i][j]=a[i-1][j-b[i]]+b[i];
fout<<a[i][j]<<" ";<

你这个算法貌似只有在输入n个物品的体积是升序的情况下才能正确,你可以试着在算法开始之前把读取的输入进行升序排序。
可以在最前加#include <algorithm>
在fin>>b[i]; 这个循环之后加sort(b,b+n+1);
试试吧,看可以不可以。
顺便问一下,你这是什么算法?