算法训练 最大体积  
时间限制:1.0s   内存限制:256.0MB
问题描述
  每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积。假如每个物品有无限件可用,那么有些体积是永远也装不出来的。为了尽量装满背包,附中的OIER想要研究一下物品不能装出的最大体积。题目保证有解,如果是有限解,保证不超过2,000,000,000
  如果是无限解,则输出0
输入格式
  第一行一个整数n(n<=10),表示物品的件数
  第2行到N+1行: 每件物品的体积(1<= <=500)
输出格式
  一个整数ans,表示不能用这些物品得到的最大体积。
样例输入
3
3
6
10
样例输出
17
 
题目解析:
  本题其实就是将所有数组合后,从无限大开始,找出第一个不能组成的数。
  分两种情况考虑:
  • 如果所有的物品体积的最大公约数不为1,则为无限解;
  • 如果所有的物品体积的最大公约数为1,则从无限大开始,找出第一个不能组成的数

  eg:

  

示例代码:

 #include<iostream>
using namespace std;
#define MAX_NUM 100000 int n;
int goods[]; //保存物品的体积
int volume[MAX_NUM]; //保存物品能组成的所有体积 int gcd(int a,int b) //求两个数的最大公约数
{
if (a % b == )
return b;
else
return gcd(b, a % b);
} int gcdAll() //求所有数的最大公约数
{
int temp = goods[];
for (int i = ; i < n; i++)
{
temp = gcd(temp, goods[i]);
}
return temp;
} int main()
{
cin >> n;
for (int i = ; i < n; i++)
cin >> goods[i]; if (gcdAll() == ) //如果所有数的最大公约数为1,则有解,否则为无限解
{
volume[] = ;
for (int i = ; i < n; i++)
{
for (int j = goods[i]; j <= MAX_NUM; j++)
{
if (volume[j - goods[i]] == ) //i=0时,j为goods[0]的倍数;
//接下来,j为 goods[i]中物品体积值组合的结果
volume[j] = ;
}
} for (int i = MAX_NUM; i >= ; i--) //逆序遍历所有的体积结果,将第一个不能组合的数输出后结束
{
if (!volume[i])
{
cout<<i;
return ;
}
}
} cout<<""; //无限解 return ;
}

最新文章

  1. Java中的位运算
  2. Android ——单元测试
  3. 转载:[转]如何学好3D游戏引擎编程
  4. Silverlight 利用DataGrid行加载事件动态控制行列显示
  5. 最新的goldengate monitor 12.1.3已经发布
  6. Northwind数据库表字段介绍
  7. 超详细单机版搭建hadoop环境图文解析
  8. liunx运维面试题汇总二
  9. Js 导出Excel IE ActiveX控件
  10. Python中lambda用法
  11. [WC2008]游览计划
  12. SpringBoot返回date日期格式化,解决返回为TIMESTAMP时间戳格式或8小时时间差
  13. Ubuntu 将其他盘挂载到/home的子目录下
  14. JS中对象与数组(大括号{}与中括号[])
  15. 20165211 学习基础和C语言调查
  16. javascript大神修炼记(4)——循环
  17. 以JPanel为基础实现一个图像框
  18. JS JavaScript实现杨辉三角
  19. perl语言入门总结-第3章-列表与数组
  20. CentOS 6.4 中yum命令安装php5.2.17

热门文章

  1. Java 关于assert
  2. hdu 5719 Arrange 贪心
  3. Three.js基础:建立Cube并实现鼠标交互,动画旋转
  4. CSLA验证规则总结
  5. poj2723 2-sat
  6. 010——VUE中使用lodash库减少watch对后台请求的压力
  7. 【2018年全国多校算法寒假训练营练习比赛(第四场)-A】石油采集(匈牙利算法)
  8. L129
  9. How to Have a Healthy Relationship --shanbei 为单身节写
  10. macOS 下 Visual Studio Code(VSCODE)安装配置及应用