- 问题
- 解析
动态规划
3.设计
4.分析
时间复杂度O(nm^2)
5.源码
https://github.com/woshichunchongchong/Algorithm_hw/blob/main/%E6%8A%95%E8%B5%84%E9%97%AE%E9%A2%98.cpp
#include
#include<string.h>
#include
#define MAX_SIZE 100
using namespace std;
int n,m;
int dp[MAX_SIZE][MAX_SIZE]; //把j元投给前i项的收益
int val[MAX_SIZE][MAX_SIZE];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
cin>>val[i][j]; //投第i项j元获得的收益
}
}
//dp
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
for(int k=0;k<=j;k++){
if(dp[i][j]<dp[i-1][j-k]+val[i][k]){
dp[i][j]=dp[i-1][j-k]+val[i][k];
}
}
}
}
cout<<"最大收益为:"<<dp[n][m]<<endl;
}