[HackerCup Round1 3] Winning at Sports (动态规划)
题目链接:https://www.facebook.com/hackercup/problems.php?pid=688426044611322&round=344496159068801
题目大意:两种赢法,一种叫做stress-free,另外一种叫做stressful。问你给定最终成绩,stress-free和stressful的局数各有多少。
建立状态:dp[i][j]代表比分为i-j的时候,stress-free的局数,有状态转移:dp[i][j] = dp[i-1][j]+dp[i][j-1]
因为如果说比分为i-1:j的话,那么我们添加一盘比赛,给i-1添加一分的话,仍然符合stress-free。
同样i:j-1也是一样:因为i严格大于j,因此我们给j-1增加一分的话,对方的总盘数为j,因为i:j-1的时候,中间的过程始终满足i'>j-1',因此添加一分也不影响满足题意。
最终结果存在dp[a][b]中。
建立状态:f[i][j]代表比分为i-j的时候,i≥j的盘数。之所以这么做是因为其与题意要求等价。
状态转移方程不变,只是转移的边界变成了i≥j。
最终答案是f[b][b]
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std; const int MOD = **+;
const int MAX_N = ;
int dp[MAX_N][MAX_N];
int f[MAX_N][MAX_N];
int T;
int a,b; int main(){
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
memset(dp,,sizeof(dp));
memset(f,,sizeof(f));
for(int i=;i<=;i++){
dp[i][] = ;
}
for(int i=;i<=;i++){
for(int j=;j<i;j++){
dp[i][j] = (dp[i][j-]+dp[i-][j])%MOD;
}
}
for(int i=;i<=;i++){
f[i][] = ;
}
for(int i=;i<=;i++){
for(int j=;j<=i;j++){
f[i][j] = (f[i][j-]+f[i-][j])%MOD;
}
}
scanf("%d",&T);
for(int cases = ; cases <= T; cases++){
scanf("%d-%d",&a,&b);
printf("Case #%d: %d %d\n",cases,dp[a][b],f[b][b]);
}
return ;
}
[HackerCup Round1 3] Winning at Sports (动态规划)的更多相关文章
- [HackerCup Round1 2] Autocomplete (Trie)
题目链接:https://www.facebook.com/hackercup/problems.php?pid=313229895540583&round=344496159068801 题 ...
- Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)
原题:pid=688426044611322&round=344496159068801">https://www.facebook.com/hackercup/problem ...
- Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)
原标题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意 ...
- Luogu 2627 修建草坪 (动态规划Dp + 单调队列优化)
题意: 已知一个序列 { a [ i ] } ,求取出从中若干不大于 KK 的区间,求这些区间和的最大值. 细节: 没有细节???感觉没有??? 分析: 听说有两种方法!!! 好吧实际上是等价的只是看 ...
- HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】
算法分析: 这个问题很显然可以转化成一个二分图最佳匹配的问题.把田忌的马放左边,把齐王的马放右边.田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边:如果平局,则连一条权为0的边:如果输 ...
- 增强学习(三)----- MDP的动态规划解法
上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...
- 简单动态规划-LeetCode198
题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
随机推荐
- org.pentaho.di.ui.core.widget.PasswordTextVar
package org.pentaho.di.ui.core.widget; import org.eclipse.swt.SWT; import org.eclipse.swt.events.Mod ...
- net cookie操作
写入方法: HttpCookie cookie = new HttpCookie("id"); cookie.Value=cookieValue; cookie.Expires = ...
- R(三): R包原理及安装
包(package)是多个函数的集合,常作为分享代码的基本单元,代码封装成包可以方便其他用户使用.越来越多的R包正在由世界上不同的人所创建并分发,这些分发的R包,可以从CRAN 或 github 上获 ...
- .NET使用OpenSSL生成的pem密钥文件
NET要使用OpenSSL生成的pem密钥文件,网上资料很少(http://www.faqs.org/rfcs/rfc1421.html,RFC1421文件又老长老长),仅有的资料还是有错误的,所以今 ...
- 【jmeter】测试报告优化<二>
如果按JMeter默认设置,生成报告如下: 从上图可以看出,结果信息比较简单,对于运行成功的case,还可以将就用着.但对于跑失败的case,就只有一行assert错误信息.(信息量太少了,比较难找到 ...
- android 开源项目一览
直接拿来用!最火的Android开源项目(一) http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects ...
- cent os下面的基本配置操作
二,修改Linux分辨率命令行 在root用户模式下,输入$ vi /boot/grub/grub.conf(路径可能会不一样,也可以是 /etc/grub.conf),打开grub.conf文件 我 ...
- 判断apache是否启动的脚本
#!/bin/bashhttp=$(netstat -tunpl | awk '{printf $4 "\n"}' | grep '80$')if [ -z "$http ...
- Firmware综述
软件的层次关系(从底层到高层)如下: 1. PSP (Processor Support Package). A group of file that are specific to a CPU ty ...
- EditPlus去行号/行标
正则表达式1: [0-9] ---------- > 1 2 3 正则表达式1: [0-9]+: ---------- > 1: 2: 3: 正 ...