您的位置:首页 > 其它

URAL1928(博弈dp)

2014-04-16 13:46 218 查看
#include <iostream>
#include <map>
#include <cstdio>
#include <string>
#include <cstring>
#include <queue>
using namespace std;

int main()
{
int n,m,k;
int dp[10005][2]={{0}};
int i,j;

scanf("%d%d%d",&n,&m,&k);

if (m>=k)
{
for (i=1;i<k;i++)
dp[i][0]=m;
dp[k][0]=k;
}
else
{
for (i=1;i<=m;i++)
dp[i][0]=m;
for (i=m+1;i<=k;i++)
dp[i][0]=i;
}

for (i=k+1;i<=n;i++)
for (j=1;j<=k;j++)
{
if (dp[i-j][1]+j>dp[i][0] || (dp[i-j][1]+j==dp[i][0] && dp[i-j][0]<dp[i][1]))
{
dp[i][0]=dp[i-j][1]+j;
dp[i][1]=dp[i-j][0];
}
}
printf("%d %d\n",dp
[0],dp
[1]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: