Question:AcWing 313.花店橱窗
Question Link:acwing.com/problem/content/315
Question Algorithm:线性DP
Question Difficulty Level:★☆☆☆☆
Question Analysis:
闫氏dp分析法:

在状态计算的时候我把 j>ij>ij>i 的情况画在了椭圆里,把 i=ji=ji=j 的情况写在了外面
Code:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int w[110][110];//w[i][j]表示第i朵花在第j个花瓶的价值
int dp[110][110];//dp[i][j]表示前i朵花放在前j个花瓶的总价值的最大值
int f,v;
long long res=0;
void print(int i,int j)
{
if(i==0||j==0)return ;
while(dp[i][j]==dp[i][j-1]) j--;
print(i-1,j-1);
cout<<j<<" ";
}
int main()
{
cin >> f >> v;
for (int i = 1; i <= f; i ++ )
for (int j = 1; j <= v; j ++ )
cin >> w[i][j];
for (int i = 1; i <= f; i ++ )
for (int j = i; j <= v; j ++ )
{
if(i==j) dp[i][j]=dp[i-1][j-1]+w[i][j];
//如果没有考虑i==j的情况,若此时dp[i-1][j-1]+w[i][j]为负,而dp[i][j-1]初始为0,则状态错误!
else dp[i][j]=max(dp[i][j-1],dp[i-1][j-1]+w[i][j]);
}
cout << dp[f][v] << endl;
print(f,v);
return 0;
}
如有疑问欢迎在评论区留言或者通过Email联系我
My Email:Wizzy-Ang@qq.com
欢迎大家关注我的个人公众号WizzyAngShare,(还有个人博客)我会在这里分享编程语言语法,算法,及区块链的相关知识,还有各种奇奇怪怪的小知识等着你~

虽然现在这个公众号有亿点草率 ,我会努力更新的~~~
本文介绍了一种解决AcWing平台313号问题——花店花瓶价值分配的线性动态规划方法。作者详细解释了闫氏dp分析法,并提供了C++代码实现,着重讲解了处理i等于j特殊情况的方法。同时,博客还分享了作者的联系方式和个人公众号资源,适合算法爱好者和动态规划初学者阅读。

被折叠的 条评论
为什么被折叠?



