一道简单至极的01背包大水题,不过以我现在的水平可能也只能发一些水题了吧QAQ。
这不算是01背包的板子,应该加了一些变型,所以还是会有一些小坑的,不过对于新学者来说应该是一道很不错的练手题了。
首先,我们要先注意内部变量
int vn,n,c,sum;//vn:need—v(所需总体积) n:石子个数 c:总体力
int v[MAXN],w[MAXN],f[MAXN];//v:石子体积 w:所需体力
然后观察数据范围 <=10000 有一点大,所以来个读入优化(由于输出较少,所以就不用输出优化了QAQ)
inline int read(){
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9') {if(ch=='-')f=-1; ch=getchar();}
while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}
return x*f;
}
前面的准备工作都做好后,就可以开开心心的开始水题了
由于是01背包变形,所以肯定要先思考其状态转移方程
本人思路是将体力看做背包 将石子看做物品 然后就很自然地得出了本题的状态转移方程:
f[j]=max(f[j],f[j-w[i]]+v[i])
然后就是蒟蒻的代码了(码丑勿批QAQ)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define int long long
#define MAXN 10000+3
using namespace std;
inline int read(){//(推销一波)如老衲所见 必有大数据 所以还是有必要来个

本文详细解析了Luogu平台上的P1510题——精卫填海,这是一道01背包问题的简单变型题目,适合初学者进行练习。作者介绍了题目的数据范围和读入优化,并给出了状态转移方程,最后展示了个人的解决方案代码。
最低0.47元/天 解锁文章
6056

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



