#include<iostream>
#include<algorithm>
using namespace std;
const int M=1000050;
int dp[M];
int dpm[M];
int main()
{
int m,account,num;
while(cin>>m)
{
cin>>account;
for(int i=0;i<account+10;i++)
{
dp[i]=-9999999;
dpm[i]=-9999999;
}
for(int i=0;i<account;i++)
{
cin>>num; //不保存到数组里 直接处理一遍
for(int j=m-1;j>=0;j--)
{
if(j>i)j=i;
if(j==0)
{
dp[0]=max(num,num+dp[0]);
dpm[0]=max(dpm[0],dp[0]);
}
else
{
dp[j]=max(dpm[j-1],dp[j])+num;
dpm[j]=max(dp[j],dpm[j]);
}
}
}
cout<<dpm[m-1]<<endl;
}
return 0;
}
HDU1024动态规划(我们不一样)
最新推荐文章于 2024-07-21 14:30:00 发布
本文介绍了一种使用动态规划解决最大收益问题的算法。通过不断更新状态数组,该算法能够在给定的约束条件下找到最优解,实现最大收益。代码中使用了C++语言,并通过循环迭代的方式实现了动态规划的核心思想。
1261

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



