ABC-270 D - Stones(dp)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABC-270 D - Stones(dp)相关的知识,希望对你有一定的参考价值。

ABC-270 D - Stones(dp)

直接贪不行。

反例如下:

10 3 

1 3 4

贪最大为4+1=5,而先选3可以3+3=6.


因为答案不具有后效性,因此可以考虑dp。

d p ( n ) dp(n) dp(n)表示当前剩余 n n n个石子先手的最大答案。

那么 d p ( n ) = max ⁡ a i + ( n − a i ) − d p ( n − a i ) = max ⁡ n − d p ( n − a i ) ∣ n ≥ a i dp(n)=\\max\\a_i+(n-a_i)-dp(n-a_i)\\=\\max\\n-dp(n-a_i)\\|n\\ge a_i dp(n)=maxai+(nai)dp(nai)=maxndp(nai)nai

显然可以枚举 a i a_i ai,那么先手的答案就是 a i a_i ai,加上 ( n − a i ) (n-a_i) (nai)时的后手,也就是 d p ( n ) dp(n) dp(n)的先手。

时间复杂度: O ( n k ) O(nk) O(nk)

#include<iostream>
using namespace std;
int N,K;
int A[100];
int dp[10001];
main()

	cin>>N>>K;
	for(int i=0;i<K;i++)cin>>A[i];
	for(int i=1;i<=N;i++)
	
		for(int j=0;j<K;j++)if(i>=A[j])dp[i]=max(dp[i],A[j]+(i-A[j])-dp[i-A[j]]);
	
	cout<<dp[N]<<endl;


以上是关于ABC-270 D - Stones(dp)的主要内容,如果未能解决你的问题,请参考以下文章

Pangu and Stones(HihoCoder-1636)(17北京OL)区间DP

UVa 12525 Boxes and Stones (dp 博弈)

Problem 1538 - B - Stones II 贪心+DP

hihoCoder 1636 Pangu and Stones

Hihocoder1636Pangu and Stones(区间DP)

Pangu and Stones HihoCoder - 1636 区间DP