hdu 5185 动态规划 分析降低复杂度

这题说的是

x[1]+x[2]+x[3]+…+x[n]=n, 这里 
0 <= x[i] <= n && 1 <= i <= n 
x[i] <= x[i+1] <= x[i]+1 && 1 <= i <= n-1 
对于一个给定的n,Gorwin想要知道有多少xi的组合满足上述等式。由于结果比较大,输出答案对m取余的结果就行。

n<=50000

经过分析我们知道第一个数必须是 0  或者 1 ,如果是0 那么我们分析,第一个开始为1 的数字, 后面必须连续到结尾都是大于等于1 的个数,这么想前面的那些前导0将变得毫无意义,只是连续非0长度的个数,我们在计算中会计算出来的。现在我们有一个方案 dp[i][j] 表示前n项到达j的方案 数, 这样我们 有 n*n*n 的状态转移, 好了现在这个复杂度过大,我们可以想办法把它降下来,我们知道连续的数字 各个都不同最多才 sqrt(n)个,现在就降了一点了, 再想想我们摈弃了 0 那么意思说第一个数是从1开始的,那么我们就不用害怕他会使用超过n个数字来达到和为n 我们知道最多也就是使用n个分别都为1 ,其余的都得小于1,那么现在我们是不是又降了最外层的一个n , 现在复杂度变成了 nsqrt(n);

我们再整理一下, dp[i][j] 表示使用1-i个数字组成和为j的个数,(因为我们可以不讨论使用了多少个数字,因为他肯定不会超过n)时间复杂度刚好

dp[i][j]=( dp[i][j-i] + dp[i-1][j-i] )%m

//
//  main.cpp
//  hdu5185c++
//
//  Created by opas on 15/3/15.
//  Copyright (c) 2015年 opas. All rights reserved.
//

#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstdio>
using namespace std;
typedef long long LL;
const int maxn = 50010;
const int maxm =321;
int dp[maxm][maxn];
int main(int argc, const char * argv[]) {
    // insert code here...
    int cas;
    scanf("%d",&cas);
    int n,m;
    for(int cc =1; cc<= cas; ++cc){
        scanf("%d%d",&n,&m);

        memset(dp, 0, sizeof(dp));
         int k=1,G=n;
        while(k*(1+k)<=G*2) k++;
        k--;
        dp[0][0]=1;
        for(int i=1; i<=k; ++i)
            for(int j=i; j <= n ; ++ j ){
                dp[i][j]= (dp[i-1][j-i]+dp[i][j-i])%m;
            }
        int ans=0;
        for(int i=1; i <= k; ++i )
            ans= (ans+dp[i][n])%m;
        printf("Case #%d: %d\n",cc, ans);

    }
    return 0;
}
时间: 2024-12-17 21:57:42

hdu 5185 动态规划 分析降低复杂度的相关文章

hdu 5185(动态规划)

Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 500    Accepted Submission(s): 168 Problem Description Gorwin is very interested in equations. Nowadays she gets an equation like thisx1+

FatMouse&#39;s Speed hdu 1160(动态规划,最长上升子序列+记录路径)

http://acm.hdu.edu.cn/showproblem.php?pid=1160 题意:现给出老鼠的体重与速度,要求你找出符合要求的最长子序列.       要求是 W[m[1]] < W[m[2]] < ... < W[m[n]](体重) && S[m[1]] > S[m[2]] > ... > S[m[n]] (速度) 分析:有两个变量的话比较不好控制,自然需要先排序.再仔细思考的话,觉得和之前做的防御导弹有点类似,都是求最多能有几个符合

php-数据分析 余弦相似度实现

php-数据分析 余弦相似度实现 <?php /** * 数据分析引擎 * 分析向量的元素 必须和基准向量的元素一致,取最大个数,分析向量不足元素以0填补. * 求出分析向量与基准向量的余弦值 * @author [email protected] */ /** * 获得向量的模 * @param unknown_type $array 传入分析数据的基准点的N维向量.|eg:array(1,1,1,1,1); */ function getMarkMod($arrParam){ $strMod

hdu 5185 Equation(分析+DP)

题意: Gorwin is very interested in equations. Nowadays she gets an equation like thisx1+x2+x3+?+xn=n, and here 0≤xi≤nfor1≤i≤nxi≤xi+1≤xi+1for1≤i≤n−1 For a certain n, Gorwin wants to know how many combinations of xi satisfies above condition.For the answ

动态规划分析总结——怎样设计和实现动态规划算法

进行算法设计的时候,时常有这种体会:假设已经知道一道题目能够用动态规划求解,那么非常easy找到对应的动态规划算法并实现:动态规划算法的难度不在于实现,而在于分析和设计-- 首先你得知道这道题目须要用动态规划来求解. 本文,我们主要在分析动态规划在算法分析设计和实现中的应用,解说动态规划的原理.设计和实现.在非常多情况下,可能我们能直观地想到动态规划的算法.可是有些情况下动态规划算法却比較隐蔽.难以发现. 本文.主要为你解答这个最大的疑惑:什么类型的问题能够使用动态规划算法?应该怎样设计动态规划

HDU 5185 Equation (线性dp 完全背包)

Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 64    Accepted Submission(s): 20 Problem Description Gorwin is very interested in equations. Nowadays she gets an equation like this x1+

&lt;转&gt;Android App性能评测分析-流畅度篇

1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字等操作,安卓的流畅度都表现比较糟糕,但是,对于App使用过程是否流畅,一直没有一个可靠的指标将用户的客观感受和数据一一对应.虽然之前有FPS(每秒帧数)作为游戏或视频类App的性能指标,但对于那些界面更新不多的App来说,仍不是一个合适的衡量数据.以下会根据实际app性能测试案例,展开进行app性能

动态规划分析总结——如何设计和实现动态规划算法

进行算法设计的时候,时常有这样的体会:如果已经知道一道题目可以用动态规划求解,那么很容易找到相应的动态规划算法并实现:动态规划算法的难度不在于实现,而在于分析和设计-- 首先你得知道这道题目需要用动态规划来求解.本文,我们主要在分析动态规划在算法分析设计和实现中的应用,讲解动态规划的原理.设计和实现.在很多情况下,可能我们能直观地想到动态规划的算法:但是有些情况下动态规划算法却比较隐蔽,难以发现.本文,主要为你解答这个最大的疑惑:什么类型的问题可以使用动态规划算法?应该如何设计动态规划算法? 动

C - Monkey and Banana HDU 1069( 动态规划+叠放长方体)

C - Monkey and Banana Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1069 Description A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof