3181专题

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

【0-1背包hard】力扣3181. 执行操作可获得的最大总奖励 II

给你一个整数数组 rewardValues,长度为 n,代表奖励的值。 最初,你的总奖励 x 为 0,所有下标都是 未标记 的。你可以执行以下操作 任意次 : 从区间 [0, n - 1] 中选择一个 未标记 的下标 i。 如果 rewardValues[i] 大于 你当前的总奖励 x,则将 rewardValues[i] 加到 x 上(即 x = x + rewardValues[i]),并

Leetcode 3181. Maximum Total Reward Using Operations II

Leetcode 3181. Maximum Total Reward Using Operations II 1. 解题思路2. 代码实现 题目链接:3181. Maximum Total Reward Using Operations II 1. 解题思路 这一题的话思路上依然还是动态规划的思路,核心的迭代关系式如下: def dp(idx, pre_sum) :if nums[idx

poj 3181

给你n元钱和无限个价钱为1~k的物品,让你求有多少种方法花光这n元钱? 思路: 参考别人的。。 可以看成是整数的划分。 如5 3 1+1+1+1+1 1+1+1+2  1+2+2 1+1+3   2+3 设dp[i][j]为i的划分中最大数不超过j的划分总数。 则dp[i][j]=dp[i][j-1]+dp[i-j][j]; 有点像组合的某个公式。 分

poj 3181 求各种纸币组成某个特定值的方案数

#include<cstdio>#include<cstring>#define MAX(x,y) ((x)>(y)?(x):(y))#define MIN(x,y) ((x)>(y)?(y):(x))long long dp1[1010];long long dp2[1010];long long MID;int main(){int n,k;long long ans;scan