1,题意:2n个正整数,分成两组n,使其和最接近.
2,思路:
动态规划: isOK[i][v]表示是否可以找打i个数,使得他们之和等于v.
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int m = 0xffff;
bool isOK[100][m];
void HalfSum(int data[], int N)
{
memset(isOK, 0, sizeof(isOK));
isOK[0][0] = true;
int sum = 0;
int n = N/2;
for (int i = 0; i < N; ++i)
sum += data[i];
for (int k = 1; k < N; ++k)
{
for (int i = 1; i <= min(k, n); ++i)
{
for (int v = 1; v <= (sum / 2); ++v)
if ((v >= data[k]) && isOK[i - 1][v - data[k]])
isOK[i][v] = true;
}
}
int ret = sum / 2;
while (!isOK[n][ret])
--ret;
cout << ret << endl;
}
int main()
{
int data[] = {1, 5, 7, 8, 9, 6, 3, 11, 20, 17};
HalfSum(data, sizeof(data) / sizeof(data[0]));
return 0;
}
分享到:
相关推荐
该问题源于《编程之美》中的2.18章节,同时也是July的《微软等公司面试100题》中的32题,主要探讨如何通过交换两个序列的元素,使得两个序列元素之和的差最小。这个问题的关键在于找到一种有效的交换策略,使得两个...
2.18 既然数组名可以用作数组的基地址,为什么对结构不能这样? 2.19 程序运行正确,但退出时却“coredump”(核心转储)了,怎么回事? 联合 2.20 结构和联合有什么区别? 2.21 有办法初始化联合吗? 2.22 ...
2.18 既然数组名可以用作数组的基地址,为什么对结构不能这样? 29 2.19 程序运行正确,但退出时却“core dump ”(核心转储)了,怎么回事? 29 联合 30 2.20 结构和联合有什么区别? 30 2.21 有办法初始化...
2.1 使用多个界定符分割字符串:在字符串中使用多个分隔符进行分割操作。 2.2 字符串开头或结尾匹配:使用字符串的startswith()和endswith()方法进行匹配。 2.3 用Shell通配符匹配字符串:利用fnmatch模块在Python中...
计算多面体体积是三维几何中的基本问题之一,涉及多边形的分割和积分。 #### 5.10 平面图轮廓 (Planar Graph Contour) 平面图轮廓是指在平面上绘制的图的边界形状。它是图形识别和分析中的重要内容。 #### 5.11 ...
2.1 使用多个界定符分割字符串:介绍了如何使用多个字符作为界定符来分割字符串。 2.2 字符串开头或结尾匹配:说明了如何检查字符串是否以某个特定的子串开头或结尾。 2.3 用Shell通配符匹配字符串:讲解了如何...
2.18 字符串令牌解析:介绍如何将字符串分割成有意义的单元(令牌)。 2.19 实现一个简单的递归下降分析器:通过编程构建一个简单的语法分析器。 2.20 字节字符串上的字符串操作:在Python3中字节串和字符串是不同的...
- 子图的分割; - 子图的排列。 **2.22 图像** 图像模块提供了处理图像数据的方法,包括: - 图像的加载; - 图像的显示; - 图像的保存。 **2.23 legend 和 legend_handler** legend 模块提供了创建图例的方法...
##### 2.18 常见代价函数 常见的代价函数包括平方差代价函数、交叉熵代价函数等。 ##### 2.19 为什么用交叉熵代替二次代价函数? 交叉熵代价函数在很多情况下能提供更好的收敛速度和更好的性能。 ##### 2.20 什么...
- **2.18 字符串令牌解析** - **知识点**:介绍了如何使用正则表达式或其他工具来解析字符串中的令牌,这对于自然语言处理非常有用。 - **2.19 实现一个简单的递归下降分析器** - **知识点**:讨论了如何实现一个...