HDU 5000 Clone(瞎搞)

题目地址:HDU 5000

这个题当时有过这种想法,就是所有满足的情况的属性和是一定的。但是不会求方案数。。(太弱。。。)而且当时也很不确定猜测是否正确。。所以就放下了。。。算是通过学习了下dp求方案数吧。

至于那个猜测,我也给不出证明,但是个人觉得是只有在和都是相等的时候,才可以通过某一个数的增减来始终保持至少有一个较大的,至少有一个较小的,而假如和不一样的话,就会产生其中一个会消灭另一个的情况。所以就转换成了和是多少的情况下方案数最大。很明显能够猜的出来是和的一半的时候(同样不会证明。。。看不出来也可以直接找最大值)。

代码如下:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <set>
#include <algorithm>

using namespace std;
int madan[3000][3000], ruo[3000];
const int mod=1e9+7;
int main()
{
    int ca, i, j, k, n, sb, ben;
    scanf("%d",&ca);
    while(ca--)
    {
        scanf("%d",&n);
        sb=0;
        for(i=1;i<=n;i++)
        {
            scanf("%d",&ruo[i]);
            sb+=ruo[i];
        }
        memset(madan,0,sizeof(madan));
        madan[0][0]=1;
        ben=0;
        for(i=0;i<n;i++)
        {
            for(j=0;j<=ben;j++)
            {
                if(!madan[i][j]) continue ;
                for(k=0;k<=ruo[i+1];k++)
                    {
                        madan[i+1][j+k]+=madan[i][j];
                        madan[i+1][j+k]%=mod;
                    }
            }
            ben+=ruo[i+1];
        }
        printf("%d\n",madan[n][sb/2]);
    }
    return 0;
}
时间: 2024-08-07 19:43:32

HDU 5000 Clone(瞎搞)的相关文章

HDU 5000 Clone(鞍山网络赛D题)

HDU 5000 Clone 这场就出了3题..就坑在这题上了,还好保住了名额 思路:要推出最大值的时候,每个人的属性和必然相同,并且这个和必然是所有和 / 2,这样的话,问题转化为给n个数字,要组合成sum / 2有多少种方法,就用dp背包推一遍就可以得解了. 现场的时候就没推出sum / 2就是答案 代码: #include <cstdio> #include <cstring> const int MOD = 1000000007; const int N = 2005; i

HDU 5000 Clone(离散数学+DP)(2014 ACM/ICPC Asia Regional Anshan Online)

Problem Description After eating food from Chernobyl, DRD got a super power: he could clone himself right now! He used this power for several times. He found out that this power was not as perfect as he wanted. For example, some of the cloned objects

hdu 5000 Clone (dp + 找规律)

Clone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 820    Accepted Submission(s): 403 Problem Description After eating food from Chernobyl, DRD got a super power: he could clone himself righ

hdu 5000 Clone

dp,用dp[i][j],表示和为i的前j个维度的种类.其中arr[i],表示第i维的最大值. 则\begin{equation} dp[i][j] = \sum_{0 \leq k \leq \min(i,arr[i])} dp[i-k][j-1] \end{equation} 最后取和为sum/2的种类即可.原因可参照投n次投骰子,求骰子和的为多少时,概率最大. 代码如下: 1 #define MOD 1000000007 2 #define MAXN 2002 3 #include <cs

HDU 5000 Clone 规律+dp 2014 ACM/ICPC Asia Regional Anshan Online

每只羊有n个属性 下面n个数字表示每个属性的值范围为[ 0, T[i] ] 对于羊圈里的a羊和b羊,若a羊的每个属性都>=b羊,则a羊会杀死b羊. 问羊圈里最多存活多少只羊. 规律1:sum相同的羊不会互相杀死. 因为若2个羊的属性都相同,a羊某个属性要增加1,则a羊另一个属性要减少1,这样ab一定能共存. 规律2: sum不同的羊不会重合. 我们设a羊sum = x,b羊sum = y,若a,b羊能共存,但不会把ab同时放到羊圈里. 因为一定存在一只羊c ,sum = x,且c和b不能共存,既

HDU 4937 (杭电多校 #7 1003题)Lucky Number(瞎搞)

题目地址:HDU 4937 多校的题以后得重视起来...每道题都错好多次...很考察细节.比如这道....WA了无数次.... 这题的思路自己真心想不到...这题是将进制后的数分别是1位,2位,3位和更多位的分开来计算. 当是1位的时候,显然只有3到6,此时只能是-1 当是2位的时候,可以转换成一元一次方程求解 当是3位的时候,可以转换成一元二次方程求解 当是4位的时候,此时最多也只有7000个数,7000^3接近1e12.所以剩下的直接枚举进制数来判断即可. 代码如下: #include <i

HDU 4923 Room and Moor(瞎搞题)

瞎搞题啊.找出1 1 0 0这种序列,然后存起来,这种情况下最好的选择是1的个数除以这段的总和.然后从前向后扫一遍,变扫边进行合并.每次合并,合并的是他的前驱.这样到最后从t-1找出的那条链就是最后满足条件的数的大小. Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 307    Accepted Su

HDU 4925 Apple Tree (瞎搞)

找到规律,各一个种一棵树,或者施肥.先施肥,先种树一样. Apple Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 197    Accepted Submission(s): 135 Problem Description I've bought an orchard and decide to plant some

HDU 5024 Wang Xifeng&#39;s Little Plot(暴力枚举+瞎搞)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5024 Problem Description <Dream of the Red Chamber>(also <The Story of the Stone>) is one of the Four Great Classical Novels of Chinese literature, and it is commonly regarded as the best one. Thi