卧薪尝胆,厚积薄发。
USACO2010JAN SILVER Cheese Towers
Date: Wed Sep 12 20:47:59 CST 2018
In Category:
NoCategory
Description:
一个奶酪塔高度最大为
$T$
。
$N$
块奶酪。第
$i$
块高度为
$H_i$
(一定是
$5$
的倍数),价值为
$V_i$
。一个奶酪如果在它上方有高度
$\ge K$
的奶酪,它的高度就会变成原来的
$4/5$
。求最大价值和。
$1\le n \le 1000,1\le t \le 100$
Solution:
如果没有
$4/5$
,那么就是一个完全背包,贪心的考虑整个塔要么没有大奶酪,要么最上方的是大奶酪,对于第二种情况,枚举最上面的奶酪,那么整个塔的高度最高就是
$(T-h[k])\times 5/4$
,直接去背包数组中查即可。
Code:
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int n,t,k;
#define MAXN 110
#define MAXT 1010
int v[MAXN],h[MAXN];
int f[MAXT];
int main()
{
scanf("%d%d%d",&n,&t,&k);
for(int i = 1;i <= n;++i)scanf("%d%d",&v[i],&h[i]);
for(int i = 1;i <= n;++i)
for(int j = h[i];j <= t * 5 / 4;++j)
f[j] = max(f[j],f[j - h[i]] + v[i]);
int ans = f[t];
for(int i = 1;i <= n;++i)
if(h[i] >= k)ans = max(ans,f[(t - h[i]) * 5 / 4] + v[i]);
cout << ans << endl;
return 0;
}
In tag:
DP-背包
Copyright © 2020
wjh15101051
ღゝ◡╹)ノ♡