C语言 最优化问题

Python014

C语言 最优化问题,第1张

这个code就是要表达一下的思维:

每一个订单是用一个长达200宽度的数字array 来表达的.

这有N个这样的订单.

每一个array, 我们在客户需要使用房间的那几天我们做如下行为:

我们表明每一天此客户需要使用多少个房间..如果是3个就是3个.

我们处理这个2维列阵如下:

把它画出来, 我们把每一列上面的数字都加起来, 从1到200, 然后一个一个比较, 算出来最大的那个总合. 那就是我们要的答案.

#include <iostream>

using namespace std

int main (void) {

//样本数量

int N, iterator

cin >>N

iterator = 0

/*最多是从第180天开始做20天*/

/*然后这里有N个订单*/

int howShouldINameThis[N][200]

/*每一个订单是用一个列阵来代表的*/

/*下面这些编码主要的意思就是将每一个列阵中客户要用房间的那些天做如下标记*/

/*如果他每天要用3个房间, 那么他/她要用房间的那些天就会全部被写上3*/

/*下面的编码会吸收所有的输入*/

while ( iterator <N ) {

int num1, num2, num3, sum

cin >>num1 >>num2 >>num3

sum = num2 + num3

for ( num2num2 <sumnum2 ++ )

{

howShouldINameThis[iterator][num2] = num1

}

iterator ++

}

/*此时我们有一个2维列阵,和N订单数量.*/

int minRoomRequirement = 0, temp = 0

for (int i = 0i <200i ++) {

for (int i2 = 0i2 <Ni2 ++) {

temp += howShouldINameThis[i2][i]

}

if ( temp >minRoomRequirement )

minRoomRequirement = temp

}

/*minRoomRequirement这个时候有你需要的答案*/

cout <<minRoomRequirement <<endl

return 0

}

DP就是动态规划(Dynamic Programming)。1,什么是动态规划(DP)?非常重要!,不要认为概念不重要,理解的深刻,你才知道对于什么样的问题去考虑有没有动态规划的方法,以及如何去使用动态规划。1)动态规划是运筹学中用于求解决策过程中的最优化数学方法。 当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法。它是应用数学中用于解决某类最优化问题的重要工具。2)如果问题是由交叠的子问题所构成,我们就可以用动态规划技术来解决它,一般来说,这样的子问题出现在对给定问题求解的递推关系中,这个递推关系包含了相同问题的更小子问题的解。动态规划法建议,与其对交叠子问题一次又一次的求解,不如把每个较小子问题只求解一次并把结果记录在表中(动态规划也是空间换时间的),这样就可以从表中得到原始问题的解。关键词:它往往是解决最优化问题滴问题可以表现为多阶段决策(去网上查查什么是多阶段决策!)交叠子问题:什么是交叠子问题,最有子结构性质。动态规划的思想是什么:记忆,空间换时间,不重复求解,由交叠子问题从较小问题解逐步决策,构造较大问题的解。一个最简单的DP问题就是斐波拉切数列。f(n) = f(n-1) + f(n-2)如果采用递归的方法计算,复杂度很高的。还有一个问题就是矩阵的连乘问题, 计算最少的乘法次数,这些都是经典的DP问题。