题目链接:Click here
题意:花和花瓶,都有编号,每种花插在不同的花瓶中美学值不同。要把这些花按某种方案放在这些花瓶里,得到美学价值最大。并且,花的编号要小于瓶子的编号。
思路:根本没思路啊。。。。
PS:动态规划,水好深,要淹死人的。。。
算每朵花放在不同花瓶中的最大美学价值,最后相加。
状态转移方程:dp[i][j]=max(dp[x][k]+a[i][j])
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <cstdlib>
using namespace std;
int value[105][105];
int dp[105][105];
int main()
{
int m, n, temp, ans;
scanf("%d%d", &m, &n);
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
scanf("%d", &value[i][j]);
for(int i = 0; i < n; i++)
dp[0][i] = value[0][i]; //初始化
for(int i = 1; i < m; i++)
for(int j = i; j < n; j++)
{
dp[i][j] = -100000000;
for(int k = i - 1; k < j; k++)
{
temp = dp[i-1][k] + value[i][j];
if(temp > dp[i][j])
dp[i][j] = temp; //第i束花的最大美学价值
}
}
ans = 0;
for(int i = 0; i < n; i++)
if(ans < dp[m-1][i])
ans = dp[m-1][i];
printf("%d\n", ans);
return 0;
}
8.10 修改以下内容:
ans = dp[m-1][m-1];
for(int i = m - 1; i < n; i++)
if(ans < dp[m-1][i])
ans = dp[m-1][i];
查找最优答案,寻找最后一行的所有解。