hdoj2159 FATE(完全背包)
2017-12-10 15:44
281 查看
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=2159
思路
每种怪都有无限个,所以使用完全背包来解决。这题比普通完全背包多了一个条件,就是杀怪的个数不应超过k个,所以要另开一个数组cnt[],cnt[i]表示在忍耐度为i的情况下,获得最大经验所杀怪的数目。
代码
#include <algorithm> #include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N = 110; int cost , value ; int dp ; int cnt ; int main() { //freopen("hdoj2159.txt", "r", stdin); int n, m, k, s; while (cin >> n >> m >> k >> s) { for (int i = 0; i < k; i++) cin >> value[i] >> cost[i]; memset(dp, 0, sizeof(dp)); memset(cnt, 0, sizeof(cnt)); for (int i = 0; i < k; i++) { for (int j = cost[i]; j <= m; j++) { if (dp[j] < dp[j - cost[i]] + value[i]) { dp[j] = dp[j - cost[i]] + value[i]; cnt[j] = cnt[j - 1] + 1; } } } bool flag = false; for (int i = 0; i <= m; i++) { if (dp[i] >= n && cnt[i] <= s) { flag = true; cout << m - i << endl; break; } } if (!flag) cout << "-1" << endl; } return 0; }
相关文章推荐
- HDOJ 2159-FATE【完全背包】
- HDOJ 2159 FATE (二维完全背包)
- hdoj-2159 FATE(二维完全背包)
- HDOJ 题目2159FATE(二维完全背包)
- HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包)
- HDU 2159 FATE(完全背包+二维费用背包)
- HDOJ 2159 FATE (二维多重背包)
- HDU - 2159 - FATE 【二维完全背包,和一维差不多呀】
- HDU【2159】FATE--完全背包
- HDU 2159 FATE【二维完全背包】
- hdu 2159 FATE (二维完全背包)
- HDOJ 2159 FATE (二维背包)
- hdu-2159-FATE(二维费用完全背包)
- hdu 2159 FATE(二维完全背包)
- hdu 2159 FATE 二维数组 完全背包
- HDU 2159---FATE【二维完全背包】
- HDU 2159 FATE 【二维费用完全背包】
- HDU 2159 FATE (二维完全背包)
- HDU-2159-FATE(二维完全背包)
- HDU 2159 FATE(完全背包)