关闭

XTU 1233 Coins(DP)

标签: ACMXTU
313人阅读 评论(0) 收藏 举报
分类:

Coins

Accepted : 95   Submit : 243
Time Limit : 1000 MS   Memory Limit : 65536 KB

Coins

Problem Description:

Duoxida buys a bottle of MaiDong from a vending machine and the machine give her n coins back. She places them in a line randomly showing head face or tail face on. And Duoxida wants to know how many situations that m continuous coins head face on among all possible situations. Two situations are considered different if and only if there is at least one position that the coins' faces are different.

Input

The first line contains a integer T(no more than 20) which represents the number of test cases.

In each test case, a line contains two integers n and m.()

Output

For each test case, output the result modulo  in one line.

Sample Input

2
4 2
5 2

Sample Output

8
19

题意:投掷n次硬币,问有连续m个正面向上的情况有多少种

思路:本来以为是组合问题,可是愣是没想出来公式。 于是想到了DP,可是由于自己写的时候状态写错了TLE,后来看了别人的题解才看懂。

很是巧妙。 定义数组dp[i][2],dp[i][0]表示投掷i次硬币满足连续m次正面向上的情况数,dp[i][1]表示投掷i次硬币不满足连续m次正面向上的情况数,也就是说,dp[i][0]+dp[i][1]等于投掷i次硬币的情况总数。  而我们知道,投i次硬币的情况总数a[i]是2的i次方(每投一次有正和反两个状态)。

当i<m时,不可能有连续m次正面向上的情况,所以dp[i][0]=0,dp[i][1]=a[i]

当i==m时,恰好有一种情况可以满足,dp[i][0]=1,dp[i][1]=a[i]-1

当i>m,状态转移方程就是dp[i][0]=2*dp[i-1][0]+dp[i-m-1][1](i-1时就已经满足有连续m次正面向上的情况,那么第i个硬币可正可反,所以乘以2,还有一种情况是在第i个硬币投出正面从而恰好有连续m次正面向上的情况,那么也就是说从第i-m+1到第i个硬币一共m个硬币都是正面,这个时候必须明确第i-m个硬币必须是反面,想一想,为什么?

假设第i-m个硬币也是正面,那么i-m到i-1这m个硬币都是正面,这种情况是在dp[i-1][0]里面的(i-1时已经满足有连续m次正面向上的情况)

所以投掷第i个硬币刚好满足条件的情况数是dp[i-m-1][1])

dp[i][1]=(a[i]-dp[i][0]+mod)%mod注意必须加上mod,负数取模会出错。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 1000010
#define ll long long
#define mod 1000000007
ll dp[N][2];
ll a[N];
int main()
{
    int T;
    int n,m;
    a[0]=1;
    for(int i=1; i<=N; i++)
        a[i]=(2*a[i-1])%mod;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d %d",&n,&m);
        memset(dp,0,sizeof(dp));
        for(int i=0; i<m; i++)
            dp[i][1]=a[i];
        dp[m][0]=1;
        dp[m][1]=(a[m]-dp[m][0]+mod)%mod;
        for(int i=m+1; i<=n; i++)
        {
            dp[i][0]=(2*dp[i-1][0]+dp[i-1-m][1])%mod;
            dp[i][1]=(a[i]-dp[i][0]+mod)%mod;
        }
        printf("%lld\n",dp[n][0]);
    }
    return 0;
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

HDU 1398 Square Coins (母函数-整数拆分变形)

Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...
  • IAccepted
  • IAccepted
  • 2014-04-28 17:20
  • 2174

HDU 1233 还是畅通工程

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233 krusal算法裸题 krusal算法是基于“避圈法”的思想,避圈法可以用并查集实现。 ...
  • u013615904
  • u013615904
  • 2015-05-14 08:40
  • 1340

Coins (多重背包,较好的题)

1、http://acm.hdu.edu.cn/showproblem.php?pid=2844 2、此题,主要注意优化,只用二进制优化,还是超时,ac的方法是将多重背包分成完全背包和01背包,01...
  • sdjzping
  • sdjzping
  • 2013-02-27 21:10
  • 2272

XTU1233 Coins

Coins Accepted : 85 Submit : 202 Time Limit : 1000 MS Memory Limit : 65536 KB Co...
  • d_x_d
  • d_x_d
  • 2016-04-05 20:08
  • 781

xtu 1233 Coins && zoj 3747 Attack on Titans

xtu 题目意思: 有n个硬币排成一排,求至少连续m个硬币正面朝上的方案数。 给定一个序列,正面朝上硬币连续值范围【0--n】 一般至少转换成至多,总方案数(2^n)- 至多(m-1)个硬币正面朝上...
  • chen_lin111
  • chen_lin111
  • 2016-01-09 22:31
  • 317

XTU OJ 1168 Alice and Bob (二维dp)

Alice and Bob Accepted : 98   Submit : 324 Time Limit : 1000 MS   Memory Limit : 65536 KB ...
  • u014253173
  • u014253173
  • 2014-08-17 14:59
  • 1411

xtu-1269 Similar Subsequence(dp+树状数组)

Similar Subsequence Accepted : 17   Submit : 73 Time Limit : 10000 MS   Memory Limit...
  • qq_31759205
  • qq_31759205
  • 2017-05-17 21:38
  • 72

XTU 1206Dormitory's Elevator(dp)

Dormitory's Elevator Accepted : 21   Submit : 191 Time Limit : 1000 MS   Memory Limi...
  • u010372095
  • u010372095
  • 2014-06-08 11:57
  • 1250

多重部分和(DP):POJ1742--Coins

本文主要探究DP中经典的多重部分和问题,有很多技巧,相信你会有所收获。
  • sonpking
  • sonpking
  • 2016-08-17 21:19
  • 534

POJ 1742 - Coins (dp 多重背包)

Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 28056   Accep...
  • zhaosdfa
  • zhaosdfa
  • 2014-07-09 21:39
  • 266
    个人资料
    • 访问:129710次
    • 积分:5103
    • 等级:
    • 排名:第6313名
    • 原创:396篇
    • 转载:11篇
    • 译文:0篇
    • 评论:21条
    最新评论