P2871 手链

传送

这个题的数据限制没有翻译出来,所以有可能产生爆内存现象

再此翻译一下:1<=n(物品个数)<=3402,1<=M(总重量)<=12880 (就这两个有点用)

显然这是一个0,1背包题

公式一般的代码如下:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,c[5001],w[5000],f[500000];//f数组要开大点,不然会RE,以及c数组,w数组不要太大,不然会爆内存
int main()
{cin>>n>>m;
  for(int i=1;i<=n;i++)
   cin>>c[i]>>w[i];
   for(int i=1;i<=n;i++)
   {
       for(int j=m;j>=c[i];j--)//这里是0,1背包的循环方式,
完全背包只需要改成 j=c[i];j<=m;j++即可 {f[j]
=max(f[j],f[j-c[i]]+w[i]); } } cout<<f[m]; }

 其余01背包:P1060开心的金明

                        P1048采药

                       P2925干草出售(这个要加个小优化)

                      P2430严酷的训练

posted @ 2019-03-09 21:12  千载煜  阅读(385)  评论(0编辑  收藏  举报