2024_7_15~暑期40天算法集训_个人笔记(第五周)_未完成版

动态规划:

01背包

有 NN 件物品和一个容量为 MM 的背包。第 ii 件物品的重量是 WiWi​,价值是 DiDi​。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。

Input

* Line 1: Two space-separated integers: N and M

* Lines 2…N+1: Line i+1 describes charm i with two space-separated integers: Wi and Di

第一行:物品个数 NN 和背包大小 MM。

第二行至第 N+1N+1 行:第 ii 个物品的重量 WiWi​ 和价值 DiDi​。

Output

* Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints

输出一行最大价值。

Sample 1

InputcopyOutputcopy
4 6
1 4
2 6
3 12
2 7
23

 

 

维度优化代码

const int maxn = 1e6 + 10;
const double EPSILON = 1e-6; // 定义一个小的阈值
int  n, m,k;
struct wu
{
    int wi;
    int vi;
}arr[maxn];
int ans[maxn];
int main()
{
    cin >>n>>m;
    int flag = 1;
    int n1 = n;
    while (n1--)
    {
        struct wu w;
        cin >> w.wi >> w.vi;
        arr[flag] = w;
        flag++;
    }
    for (int i = 1; i <= n; i++)//外层遍历选的物品个数
    {
        for (int j = m; j >= arr[i].wi; j--)//内层反向枚举背包重量
        {
            ans[j] = max(ans[j], arr[i].vi + ans[j - arr[i].wi]);
        }
    }
    cout << ans[m];
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值