题目见:叠放箱子问题(方法一)【DP】
> 解题思路
这一道题比第一种方法更加优化。
f[i][j]表示前i个箱子排j个的最小总重量(这里的前i个箱子还是倒着来的,为从第i个箱子到第n个箱子),要求最小总重量是因为为了能让接下来的一个箱子有更多重量去装更多的箱子。
状态转移方程:
f[i][j]=min(f[i][j],f[i-1][j-1]+w[i])
输出的时候就是for语句(倒着)循环一下,如果循环到第一个f[1][i]的重量有存入过,就直接退出,输出i的值。
感性理解一下
> 代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,f[1005][1005]={
0},w[1005],c[1005]={
0};
//w数组存箱子自身