算法学习之路——dp

背包问题模板:

#include<bits/stdc++.h>
using namespace std;
const int N=205;
int m,n;int dp[N][N];
int w[N],v[N];
int main()
{
cin>>m>>n;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>v[i];
}
for(int i=1;i<=n;i++)
{
for(int j=m;j>=0;j–)
{
if(w[i]>j) dp[i][j]=dp[i-1][j];
else dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);
}
}
cout<<dp[n][m]<<endl;
return 0;
}


完全背包问题模板:

#include<bits/stdc++.h>
using namespace std;
int M,N;int f[35][250];
int w[34],c[35];
int main()
{
cin>>M>>N;
for(int i=1;i<=N;i++)
{
cin>>w[i]>>c[i];
}
for(int i=1;i<=N;i++)
{
for(int v=0;v<=M;v++)
{
if(v<w[i]) f[i][v]=f[i-1][v];
else f[i][v]=max(f[i-1][v],f[i][v-w[i]]+c[i]);
}
}
cout<<“max=”<<f[N][M]<<endl;
return 0;
}

原文---------------------
https://blog.csdn.net/Wchenchen0/article/details/81155788
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43597036/article/details/87514304