将第一次正式的转载献给队友酱,代码部分还是有些失败
当时看题以为需要好多种分类讨论,看到题解的dp简单机智...(还是自己dp没学会)
dp用的妙,注意数据范围,仅开成INF是不行的
-
#include<cstdio>
-
#include<iostream>
-
#include<cstring>
-
#include<algorithm>
-
using
namespace
std;
-
typedef
long
long ll;
-
const
int maxn =
5e3 +
10;
-
const
int INF =
1e9;
-
ll n, m, k, a, b, c;
-
int T;
-
ll f[maxn];
-
-
-
void solve()
-
{
-
memset(f,
0,
sizeof(f));
-
f[
0] =
0;
-
for(
int i =
1; i <= max(n + k, m + k); i++)
-
{
-
f[i] = (ll)maxn * INF;
-
if(i >=
2) f[i] = min(f[i], min(f[i -
2] + a, f[i -
2] + b));
-
if(i >=
3) f[i] = min(f[i], f[i -
3] + b);
-
if(i >=
1) f[i] = min(f[i], f[i -
1] + min(a, b));
-
}
-
}
-
-
-
int main()
-
{
-
-
cin >> T;
-
-
while(T--)
-
{
-
ll ans = (ll)maxn * INF;
//注意初始化问题,hdu1024也WA在了初始化
-
cin >> n >> m >> k >> a >> b >> c;
-
solve();
//计算同性别各种人数花费最小
-
for(
int i =
0; i <= k; i++)
-
{
-
ll t = i * c + f[n + k - i] + f[m + k - i];
//按情侣对数情况遍历讨论,简单好理解
-
ans = min(ans, t);
-
}
-
cout << ans <<
endl;
-
}
-
-
return
0;
-
}