ural 1114,计数dp
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1114
题意:N个盒子,a个红球,b个蓝球,把求放到盒子中去,没有任何限制,有多少种放法。
刚开始我想数学方法啊!想了半天,情况太多了。偷偷搜了一下这个题目,DP,好的,两分钟DP方程出来了。
dp[i][j][k] 表示前i个盒子,用掉了j个红球,k个蓝球,马上dp方程 dp[i][j][k] =∑ dp[i-1][m][n],m=[0,j],n=[0,k];初始化dp[0][0][0] = 1;
要指出的是: 网上有很多解法,m,n的范围是反的,但是也能AC,如果按照这个思路是肯定不对的,至于为啥能AC,我想到了,很多人也许和我的思路刚好相反,他是想把dp[i][j][k] 是还有j个红球没有用,k个蓝球没有用,那么这样的话,循环得反着来,而且初始化应该是dp[0][a][b] = 1;
然而,我这里想提的是,LJH大神的,他就是反着来的,但是超级厉害的地方是,他没有枚举j,k,也就是说没有5层循环,Orz.
用一个数组tsum记录红球k的方案下的答案,sum更新蓝球k的方案下的答案,这样dp[i][j][k] 就可以利用以前的dp[i-1][j][k] 的答案了,只需要不断更新sum,tsum[k],
#include <bits/stdc++.h>
using namespace std; unsigned long long dp[][][];
unsigned long long tsum[]; int main()
{
int n,a,b;
scanf("%d%d%d",&n,&a,&b);
dp[][][] = ; unsigned sum = ; for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
for(int k=;k<=;k++)
{
for(int jj = ;jj<=j;jj++)
for(int kk = ;kk<=k;kk++)
dp[i][j][k] += dp[i-][jj][kk];
}
}
} unsigned long long ans = ;
for(int i=; i<=a; i++)
for(int j=; j<=b; j++)
ans +=dp[n][i][j];
printf("%I64u\n",ans); return ;
}
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<deque>
#include<functional>
#include<iterator>
#include<set>
#include<utility>
#include<stack>
#include<queue>
#include<iomanip>
using namespace std; typedef unsigned long long ll; ll dp[][][];
ll tsum[];
int main()
{
int n;
int a,b;
ll sum;
cin>>n>>a>>b;
memset(dp,,sizeof(dp));
dp[][][]=;
for(int i=;i<=n;++i)
{
memset(tsum,,sizeof(tsum));
for(int j=;j<=a;j++)
{
sum=;
for(int k=;k<=b;k++)
{
sum+=dp[i-][j][k];
tsum[k]+=sum;
dp[i][j][k]=tsum[k]; }
}
} sum=;
for(int i=;i<=a;++i)
for(int j=;j<=b;++j)
sum+=dp[n][i][j];
cout<<sum<<endl;
return ;
}
ural 1114,计数dp的更多相关文章
- HDU5800 To My Girlfriend 背包计数dp
分析:首先定义状态dp[i][j][s1][s2]代表前i个物品中,选若干个物品,总价值为j 其中s1个物品时必选,s2物品必不选的方案数 那么转移的时候可以考虑,第i个物品是可选可可不选的 dp[i ...
- CodeForces 176B Word Cut (计数DP)
Word Cut Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...
- [DP之计数DP]
其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...
- HDU4815/计数DP
题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=4815] 简单说一下题意: 有n道题,每到题答对得分为a[ i ],假如A不输给B的最小概率是P,那么A ...
- HDU 6377 度度熊看球赛 (计数DP)
度度熊看球赛 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 计数dp
计数dp 计数类的$dp$没做过几个,所以之前都放到"思维"标签下了,后来发现原来这属于一类问题啊...搬过来了. 管道取珠:https://www.lydsy.com/Judge ...
- [SDOI2010]地精部落[计数dp]
题意 求有多少长度为 \(n\) 的排列满足 \(a_1< a_2> a_3 < a_4 \cdots\) 或者 $a_1> a_2 < a_3 > a_4\cdo ...
- 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas
[题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...
- 【AtCoder】AGC022 F - Leftmost Ball 计数DP
[题目]F - Leftmost Ball [题意]给定n种颜色的球各k个,每次以任意顺序排列所有球并将每种颜色最左端的球染成颜色0,求有多少种不同的颜色排列.n,k<=2000. [算法]计数 ...
- 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值
[题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...
随机推荐
- [分享]关于windows下的小技巧
----1.首先,决定您要增加到菜单中的文件类型,以及启动这类文件的应用程序.如果是某些在启动时会自动打开的新文件或让您可以立即使用的应用程序,如记事本.写字板或画图等,就不需要特别的准备工作.但如果 ...
- Java: xml转换
java对于xml的转换有很多种,比较有名的有:DOM, DOM4J, JDOM, SAX.这里要介绍的是javax.xml包的对xml文件的转换.相比于前面几种是最简单的. 直接上代码: Stude ...
- Myeclipse10编写jsp时出现 Multiple annotations found at this line:
今天,老师讲完课做了一个小练习,就是编写一个jsp页面.写完后,我发现少些了点东西,我准备使用<% %>添加是发现,报错了 Multiple annotations found at th ...
- 。。。Hibernate注解配置的注意事项。。。
今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...
- git操作??
一直在搞git,但是难度真的很大,我的英语超烂,而申请git账号时全部是英文的,我就拿着翻译有道词典,必应.进行翻译,一个一个单词的往上面打,一张网页能翻译一下午,最后还是不知道应该具体怎么去操作,所 ...
- SparkSQL基础应用(1.3.1)
一.概述 从1.3版本开始Spark SQL不再是测试版本,之前使用的SchemaRDD重命名为DataFrame,统一了Java和ScalaAPI. SparkSQL是Spark框架中处理结构化数据 ...
- paper 68 :MATLAB中取整函数(fix, floor, ceil, round)的使用
MATLAB取整函数 1)fix(x) : 截尾取整. >> fix( [3.12 -3.12]) ans = 3 -3 (2)floor(x):不超过x 的最大整数.(高 ...
- CSSの神小结-简单备忘一下(亲测可用)
css 选择器优先级,标签>id>class 权重 id>class>标签 只记录能想到的以免遗忘: 1.字体css可继承 2.表格:表格细线的合并,表格单元格合并,单元格内容 ...
- Logic BIST
Logic BIST is crucial for many applications, in particular for life-critical and mission-critical ap ...
- 要心中有“数”——C语言初学者代码中的常见错误与瑕疵(8)
在 C语言初学者代码中的常见错误与瑕疵(7) 中,我给出的重构代码中存在BUG.这个BUG是在飞鸟_Asuka网友指出“是不是时间复杂度比较大”,并说他“第一眼看到我就想把它当成一个数学问题来做”之后 ...