目录
P1048 [NOIP2005 普及组] 采药
思路
01背包问题【思路可以看哔哩哔哩视频哈】
附上视频链接吧
代码实现【菜鸟本鸟自己写的】
P1060 [NOIP2006 普及组] 开心的金明
思路
跟01背包一样,没什么区别哦
视频链接哈哈哈,不过不管怎么说,我还是喜欢二维数组来做,模型其实很固定
洛谷试练场 普及组 动态规划的背包问题_哔哩哔哩_bilibili
代码实现
P1049 [NOIP2001 普及组] 装箱问题
思路
洛谷试练场 普及组 动态规划的背包问题_哔哩哔哩_bilibili
其实都是模板,我还是二维数组,不过这个应该一维数组更方便欸、
代码实现
P1164 小A点菜
思路
牛客练习——九小时九个人九扇门
思路
代码
思路
代码
P1734 最大约数和
思路
代码实现
//二维数组的实现
//还是决定学会一维数组的【没错我其实不会】
P1510 精卫填海
思路
代码实现
P1466 [USACO2.2]集合 Subset Sums
思路
动态规划DP0-1背包_哔哩哔哩_bilibili 【这个是我觉得最清楚最基础的视频】
洛谷试练场 普及组 动态规划的背包问题_哔哩哔哩_bilibili【题目来源哦】
#include
using namespace std;
int dp[105][1005];
int main()
{
int t,m,i,j;
int ti[105]={0},vi[105]={0};
scanf("%d %d",&t,&m);
for(i=1;i<=m;i++)
scanf("%d %d",&ti[i],&vi[i]);
for(i=1;i<=m;i++)
{
for(j=1;j<=t;j++)
{
if(ti[i]>j)
dp[i][j]=dp[i-1][j];
else
dp[i][j]=max(dp[i-1][j],dp[i-1][j-ti[i]]+vi[i]);
}
}
printf("%d\n",dp[m][t]);
return 0;
}
#include
using namespace std;
int dp[26][30005];
int v[26],w[26];
int main()
{
int i,j,n,m;
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d %d",&v[i],&w[i]);
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(v[i]>j)
dp[i][j]=dp[i-1][j];
else
dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]*v[i]);
}
}
printf("%d",dp[m][n]);
return 0;
}
#include
#include
using namespace std;
int dp[35][20005];
int v[35];
int main()
{
int n,m,i,j;
scanf("%d",&m);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(v[i]>j)
dp[i][j]=dp[i-1][j];
else
dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+v[i]);
}
}
if(dp[n][m]>=m) printf("0\n");
else printf("%d\n",m-dp[n][m]);
return 0;
}