题目链接: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 (动态规划)的更多相关文章

  1. [HackerCup Round1 2] Autocomplete (Trie)

    题目链接:https://www.facebook.com/hackercup/problems.php?pid=313229895540583&round=344496159068801 题 ...

  2. Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)

    原题:pid=688426044611322&round=344496159068801">https://www.facebook.com/hackercup/problem ...

  3. Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)

    原标题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意 ...

  4. Luogu 2627 修建草坪 (动态规划Dp + 单调队列优化)

    题意: 已知一个序列 { a [ i ] } ,求取出从中若干不大于 KK 的区间,求这些区间和的最大值. 细节: 没有细节???感觉没有??? 分析: 听说有两种方法!!! 好吧实际上是等价的只是看 ...

  5. HDU 1052 Tian Ji -- The Horse Racing【贪心在动态规划中的运用】

    算法分析: 这个问题很显然可以转化成一个二分图最佳匹配的问题.把田忌的马放左边,把齐王的马放右边.田忌的马A和齐王的B之间,如果田忌的马胜,则连一条权为200的边:如果平局,则连一条权为0的边:如果输 ...

  6. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  7. 简单动态规划-LeetCode198

    题目:House Robber You are a professional robber planning to rob houses along a street. Each house has ...

  8. 动态规划 Dynamic Programming

    March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...

  9. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

随机推荐

  1. 前端页面div float 后高度 height 自适应的问题

    最近在画项目页面的时候遇到了一个左侧div一旦加上float:left 属性后,设置其高度height:100% 不起作用,后来网上查了半天也没有找到很好的解决方案,只在csdn里发现了这个马上记录下 ...

  2. 文件上传工具类 UploadUtil.java

    package com.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...

  3. eclipse修改工程名

    直接修改工程可能会产生一些莫名其妙的问题,需遵循以下三步: 1. 右键工程:Refactor->Rename,或选中工程按F2,修改名称 2. 右键工程:Properties->Web P ...

  4. ArrayList和LinkedList遍历方式及性能对比分析

    ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayLis ...

  5. DW(五):polybase集群安装

    目录: Prerequisites 集群配置规划 polybase install firewall config 集群配置 删除计算节点 install Prerequisites Microsof ...

  6. C++11中的Lambda表达式

    原文地址:C++中的Lambda表达式 作者:果冻想 一直都在提醒自己,我是搞C++的:但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C ...

  7. 10socket编程

    这一节主要关注的还是粘包问题,我们利用recv实现一个recv_peek函数,它的目的是偷窥目的,它是利用recv的一个msg_peek参数与read的区别,read读取后 会擦除缓冲区的内容,而re ...

  8. SPOJ #5 The Next Palindrome

    "not more than 1000000 digits" means an efficient in-place solution is needed. My first so ...

  9. 【KVM安装】在Centos6.8中安装KVM

    阅读目录 前题条件 章节1:安装Centos6.8-进行硬件检测 章节2:配置网络-设置桥接方式 章节3:安装KVM 章节4:OVA转qcow2 章节5:使用KVM创建虚拟机 章节6:参考链接 前题条 ...

  10. FDATool使用

    1. 幅值有两种单位可选,linear和db.切换单位时Toolbox的图例会跟着变化,可以看出两种单位下参数含义不太一样. 线性坐标:例如设置为0.01/0.01,表示通带幅度0.99~1.01,阻 ...