13th 【背包 动态规划】终极装备

                                              终极装备

题目描述:

近日DT中的Henry和Geer两人沉迷于仙剑1这款经典的游戏中(都怪Michael,是他把这个游戏推荐给他们的,才让他们如此沉迷,无心学习!不过这款游戏的确不错,想当年 ……哦,对不起,扯远了,回正题)。

Henry和Geer经过一段复杂的迷宫(游戏里的迷宫多得很,有不好走!苦了两位啊),并且在Michael的帮助之下,他们终于到了女娲遗迹这个地方,并且各自学会了一套终极魔法!同时还得到了一批终极装备!(晕!一批终极装备!真不知道编游戏的人怎么想的,既然是终极装备,为何弄那么多出来啊!)问题来了,在他们得到这些终极装备之前他们还有一些能和终极装备媲美的装备,并且数量和终极装备的数量一样,他们得到这些终极装备后就想让自己操控的游戏人物变得更强,但是一个人物最大负重为M,每个装备可提升人物V[i]能量值,自身重量为W[i](我们把这两个值称为该装备的属性),Henry和Geer想让自己操控的人物在最大负重的范围内获得最大的能量值,(并且同一种装备只能选择一样或者不选){A:什么叫同一种装备? B:这个,这个… 晕 ! 就是如果V1[i]和 V2[i]就是同一种装备,就是i相同}于是作为Oier的他们编写了一个程序来帮他们来选择装备!(学习这个就是安逸,打游戏都要轻松一点!)

输入数据:

第一行3个数:M,N,T。M代表人物的最大负重,N为得到的终极装备数量,T为人物不带任何装备的能量值。

接下来N行,一行4个数,V1[i],W1[i],V2[i],W2[i]

V1[i],W1[i]:表示原来装备的属性(V1[i]:能量值;W1[i]:物品重量);

V2[i],W2[i]:表示得到的终极装备属性(V2[i]:能量值;W2[i]:物品重量);

输出数据:

一个数,就是人物能够达到的最大能量值。

样例输入:

50  3  20
12  18  23  19
17  10  30  24
20  20  17  20

样例输出:

80

时间限制:

每测试点时间<=1S

数据范围:

(1<=M,T<=10000,1<=N<=200)

(1<=W[i],V[i]<=10000)


讲了半天其实就是说n个物品装入体积为V的包里,只是每个物体有两种形态可以选,求最大价值

我的动归是基本不会的,背包也只会最简单的。。。

f[i]表示容量为i时的最大价值

所以f[i]=max(f[i],f[i-w[i]]+v[i])

这是基本的转移方程,这里是优化了空间用一维数组表示的,当然也可以用f[i][j]表示第i个物品装到j容量时的价值,

就是f[i][j]=max(f[i][j],f[i-1][j+w[i]]+v[i])当然一开始要让f[i][j]=f[i-1][j],这个很容易理解,就是一件件加,慢慢向后推进。

这里有一个小小的变化,就是两件物品二选一,那就把他们当成一件,然后在循环内操作两次就行了,保证只能装一件。

附上程序。

#include   
#include   
#include   
#include   
#include 
using namespace std;  
int v,n,k;
int max(int a,int b)
{return (a>b?a:b);}

struct node{
    int w1,w2; 
    int v1,v2;
    }a[205];
int f[10005];
int ans;
int main()  
{     //freopen("test1.in","r",stdin);
      //freopen("test1.out","w",stdout);
      cin>>v>>n>>k;
      for(int i=1;i<=n;i++)
        cin>>a[i].v1>>a[i].w1>>a[i].v2>>a[i].w2;
      for(int i=1;i<=n;i++)
        for(int j=v;j>=1;j--)
          {   if(a[i].w1<=j)
              f[j]=max(f[j],f[j-a[i].w1]+a[i].v1);
              if(a[i].w2<=j)
              f[j]=max(f[j],f[j-a[i].w2]+a[i].v2);  
                }
      for(int i=1;i<=v;i++)
      ans=max(ans,f[i]);
      cout<







你可能感兴趣的:(动态规划)