2018-2019 ACM-ICPC ECfinal I. Misunderstood … Missing

Posted heyuhhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-2019 ACM-ICPC ECfinal I. Misunderstood … Missing相关的知识,希望对你有一定的参考价值。

题目链接

首先有两个个属性值:(A,D),其中(A)表示目前攻击力,(D)表示每回合攻击的增量。
现在一共有(n)个回合,每一回合(i),可以有以下三种操作:
1.进行攻击,造成(A+a_i)的伤害;
2.攻击增量增加(b_i),变为(D+b_i);
3.攻击增加(c_i),变为(A+c_i)
现在询问,最后造成的伤害最大为多少。

?
考虑目前位于第 (i) 个回合,如果选择攻击,当前则会造成一定的伤害;如果选择增加攻击力或者增加增量,那么这是对后面的攻击有影响的。
我们不妨假设后面会攻击 (j) 次,在第 (i) 回合增加攻击力对答案的贡献就为(j*c_i),这个很好计算。但是增加增量就不是很好计算了,位置不同,最后的攻击力也不同。但是通过分析:假设后面在(x_p,x_q,cdots,x_{r})(j)个位置进行了攻击,那么贡献即为:(b_i*(x_p-i)+b_i*(x_q-i)+cdots+b_i*(x_r-i)=b_i*(x_p+x_q+cdots+x_r-i*j))。如果我们知道后面的攻击位置下标之和,那么对后面的贡献也很清楚了。
所以我们可以考虑倒着dp,设(dp(i,j,k))为目前第(i)个位置,后面攻击了(j)次,下标和为(k),造成的最大伤害。转移的话就分三种情况:
[ dp(i,j,k)=max(dp(i+1,j-1,k-i)+a_i),dp(i+1,j,k)+max(j*c_i,b_i*(k-j*i))) ]
细节见代码吧:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 105;
int T;
int n ;
ll a[N], b[N], c[N] ;
ll dp[N][N * N] ;
int main() {
    ios::sync_with_stdio(false); cin.tie(0) ;
    cin >> T;
    while(T--) {
        memset(dp, 0xcf, sizeof(dp)) ;
        cin >> n;
        for(int i = 1; i <= n ; i++) cin >> a[i] >> b[i] >> c[i] ;
        dp[1][n] = a[n] ;
        for(int i = n - 1 ; i >= 1 ; i--) {
            for(int j = n - i + 1 ; j >= 1 ; j--) {
                for(int k = j * (2 * n - j + 1) / 2 ; k >= (2 * i + j - 1) * j / 2; k--) {
                    dp[j][k] = max(dp[j][k], dp[j][k] + max(1ll * j * c[i], (ll)b[i] * (k - j * i)));
                    dp[j][k] = max(dp[j][k], dp[j - 1][k - i] + a[i]) ;
                }
            }
        }
        ll ans = 0;
        for(int i = 1 ; i <= n ; i++)
            for(int j = i * (1 + i) / 2 ; j <= i * (2 * n - i + 1) / 2; j++)
                ans = max(ans, dp[i][j]) ;
        cout << ans << '
';
    }
    return 0;
}

以上是关于2018-2019 ACM-ICPC ECfinal I. Misunderstood … Missing的主要内容,如果未能解决你的问题,请参考以下文章

2018-2019 ACM-ICPC, Asia Dhaka Regional Contest

(寒假GYM开黑)2018-2019 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2018)

2018-2019 ACM-ICPC Brazil Subregional Programming Contest

2019.05.02 第九次训练 2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest

2018-2019 ACM-ICPC, Asia Seoul Regional Contest

(寒假GYM开黑)2018-2019 ACM-ICPC Brazil Subregional Programming Contest