8-10
无聊时候写博客,说不定会找到一些趣味。
今年天讲了背包,我只看了一些原理的东西 01背包问题和完全背包问题
感觉这些东西比前面讲的要难些
今天看了别人的博客发现大牛真多,还有一个在那讲泰勒公式,把我佩服的真的是五体投地
路漫漫其修远兮,吾将上下而求索。
在这奉上链接,有兴趣可以看一下。
还有就是以前不会做的题现在,再看就没那么难了。学习需要一个过程。
然后还做了一些并查集的问题
01背包 完全背包 模板
//dp[102][10010];
//10^6
//dp[102][10010]; dp[i][j] --- i(1-i) j(容量) 价值
/*
dp[i][j] <-- dp[i-1][j]
dp[i][j] <-- dp[i-1][j-w[i]]++p[i];
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[102][10010];
int w[102];
int p[102];
int main(){
int n,W;
scanf("%d%d",&n,&W);
for (int i=1;i<=n;i++)
{
scanf("%d%d",&w[i],&p[i]);
}
for (int i=0;i<=W;i++)
dp[0][i]=0;
for (int i=1;i<=n;i++){
for (int j=0;j<w[i]&&j<W;j++)
dp[i][j]=dp[i-1][j];
for (int j=w[i];j<=W;j++){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]);
// dp[i][j] <-- dp[i-1][j]
// dp[i][j] <-- dp[i-1][j-w[i]]++p[i];
}
}
/*
完全背包
dp[10010];
for (int i=1;i<=n;i++) i物品
0-W
j
j+w[i] --- dp[j]
for (int j = w[i];j<=W;j++)
dp[j] = max(dp[j],dp[j-w[i]]+p[i])
// w[i] = 2; p[i]=2;
// dp[2] = max(dp[2],dp[2-w[i]+p[i])--- 2
// dp[4] = max(dp[4],dp[4-w[i]+p[i])--- 4
01背包
for (int i=1;i<=n;i++)
for (int j = W;j>=w[i];j--)
{
dp[j] = max(dp[j],dp[j-w[i]]+p[i])
// dp[4] = max(dp[4],dp[2]+p[i])--- 2
// dp[2] = max(dp[2],dp[2-w[i]]+p[i])--- 2
}
*/
}
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[102][10010];
int w[102];
int p[102];
int main(){
int n,W;
scanf("%d%d",&n,&W);
for (int i=1;i<=n;i++)
{
scanf("%d%d",&w[i],&p[i]);
}
memset(dp,0,sizeof(dp));
for (int i=1;i<=n;i++){
for (int j=0;j<w[i]&&j<W;j++)
dp[i][j]=dp[i-1][j];
for (int j=w[i];j<=W;j++){
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+p[i]);
// printf("%d %d %d %d\n",i,j,w[i],dp[i][j]);
}
}
printf("%d\n",dp[n][W]);
return 0;
}