usaco3.4.5“破锣摇滚”乐队

本文介绍了一种多背包问题的解决方法,通过三维动态规划算法实现了物品分配的最大化效益。文章给出了具体的C++实现代码,并详细展示了如何通过多重循环来更新状态转移方程。

背包问题,只不过有了多个背包。

虽然代码简单,但也要看懂。


#include<cstdio>
#include<iostream>
#include <queue>
#include <cmath>
#include <algorithm>
using namespace std;
int f[21][21],T[21];
int main()
{
    //freopen("rockers.in","r",stdin);
    //freopen("rockers.out","w",stdout);
    int n,t,m;
    cin>>n>>t>>m;
    for(int i=1;i<=n;i++)
        cin>>T[i];
    for(int i=1;i<=n;i++)
        for(int m1=m;m1>=1;m1--)
        for(int t1=t;t1>=T[i];t1--)
    {
        f[m1][t1]=max(f[m1][t1],max(f[m1-1][t]+1,f[m1][t1-T[i]]+1));


    }
    cout<<f[m][t]<<endl;
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值