tf girl

路漫漫其修远兮,吾将上下而求索。

导航

多重背包

题目地址:http://codeforces.com/problemset/problem/148/E

背包问题,物品就是每一层,容量就是发火次数。

#include<iostream>
using namespace std;

int v[101][101],x[101],w[101][101],dp[101][10001];
int main()
{
    int n,m;
    cin>>n>>m;
    //int i=3;
    for(int i = 1;i <= n;i++)
    {
        cin>>x[i];
        for(int j = 1;j <= x[i];j++)
        {
            cin>>v[i][j];
            v[i][j]+=v[i][j-1];
        }
    }
    for(int i = 1;i <= n;i++)
      for(int j = 1;j <= x[i];j++)
        for(int k = 0;k <= j;k++)//暴力枚举在某个架子上扔n次的最大损失
           w[i][j] = max(w[i][j],v[i][k]+v[i][x[i]]-v[i][x[i]-j+k]);
    for(int i = 1;i <= n;i++)
      for(int j = m;j >= 0;j--)
        for(int k = 0;k <= x[i]&&k <= j;k++)
        dp[i][j] = max(dp[i][j],dp[i-1][j-k]+w[i][k]);
        cout<<dp[n][m];
}

 

posted on 2015-01-26 16:54  tf girl  阅读(136)  评论(0)    收藏  举报