I will no longer be a tran|

yabnto

园龄:2年8个月粉丝:14关注:17

[ABC270D] Stones

[ABC270D] Stones

题意

有两个人玩游戏,有 n 个石子,和一个长度为 k 的序列,每次可以取 ai 个但前提是剩下来的石子数有 ai 个,第一个人先取,问两边都是用最优策略时,第一个人最多能得多少个石子。

思路

可以设计状态 (x,y,f) 表示第一个人取了 x 个石子,第二个人取了 y 个石子,由第 f+1 人开取,显然 x+yn

那么可以优化状态,因为要求的是第一个人最多能得多少个石子,所以可以将其中一个变量提取出来变成最优属性,可是光靠知道另一个人取了多少个石子是不够的,所以可以将它变成一共已经取了 x 个石子,还有由于两个人都用的是最优策略,所以 f 可以优化掉,也就变成了 dpx=y,那转移就是 dpx=max(xdpxai)

代码

#include <iostream>
using namespace std;
const int MaxN = 110, MaxV = 1e4 + 10;
int dp[MaxV], a[MaxN], n, k;
int main() {
cin >> n >> k;
for (int i = 1; i <= k; i++) {
cin >> a[i];
}
for (int i = 0; i <= n; i++) {
for (int j = 1; j <= k; j++) {
if (i >= a[j]) {
dp[i] = max(dp[i], i - dp[i - a[j]]);
}
}
}
cout << dp[n] << endl;
return 0;
}

本文作者:yabnto

本文链接:https://www.cnblogs.com/ybtarr/p/17410451.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   yabnto  阅读(32)  评论(0编辑  收藏  举报
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 光辉岁月 Audio artist
  3. 3 名前を呼ぶよ Audio artist
  4. 4 战歌 Audio artist
  5. 5 時を越えた想い Audio artist
  6. 6 所念皆星河 Audio artist
  7. 7 See you again Audio artist
战歌 - Audio artist
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起