luogu 题解 P1510 【精卫填海】

一道简单至极的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])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值