HDU 4301 Contest 1
开始时设的是第一、二行前i,j列有k种的方法数,但是,这根本转移不了--!
难点在于1,2行的讨论啊。。。
设f[i][j][0]为前i列分成j个部分,且第i列的两个为同一部分的方法数.
f[i][j][1]为前i列分成j个部分,且第i列的两个为不同部分的方法数。
于是,很容易就会转到递推方程 了。
f[i+1][j][0]=f[i+1][j][0]+f[i][j][0]+f[i][j][1]*2
f[i+1][j][1]=f[i+1][j][1]+f[i][j][1]
f[i+1][j+1][0]=f[i+1][j+1][0]+f[i][j][0]+f[i][j][1]
f[i+1][j+1][1]=f[i+1][j+1][1]+f[i][j][0]*2+f[i][j][1]*2
f[i+1][j+2][1]=f[i+1][j+2][1]+f[i][j][0]+f[i][j][1]
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MOD 100000007
using namespace std; int dp[2][2002][2]; int main(){
int n,k,T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&k);
int pt=1;
memset(dp[1],0,sizeof(dp[1]));
dp[1][1][0]=dp[1][2][1]=1;
for(int i=2;i<=n;i++){
memset(dp[i&1],0,sizeof(dp[i&1]));
for(int p=1;p<=k;p++){
dp[i&1][p][0]=(dp[i&1][p][0]+dp[(i-1)&1][p][0]+dp[(i-1)&1][p][1]*2)%MOD;
dp[i&1][p][1]=(dp[i&1][p][1]+dp[(i-1)&1][p][1])%MOD;
if(p-1>0){
dp[i&1][p][0]=(dp[i&1][p][0]+dp[(i-1)&1][p-1][0]+dp[(i-1)&1][p-1][1])%MOD;
dp[i&1][p][1]=(dp[i&1][p][1]+dp[(i-1)&1][p-1][0]*2+dp[(i-1)&1][p-1][1]*2)%MOD;
}
if(p-2>0){
dp[i&1][p][1]=(dp[i&1][p][1]+dp[(i-1)&1][p-2][0]+dp[(i-1)&1][p-2][1])%MOD;
}
}
}
int ans=0;
ans=(ans+dp[n&1][k][0]+dp[n&1][k][1])%MOD;
printf("%d\n",ans);
}
return 0;
}
HDU 4301 Contest 1的更多相关文章
- HDU 4301 Divide Chocolate(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=4301 题意: 有一块n*2大小的巧克力,现在某人要将这巧克力分成k个部分,每个部分大小随意,问有多少种分法. 思 ...
- HDU 5045 Contest(状压DP)
Problem Description In the ACM International Collegiate Programming Contest, each team consist of th ...
- hdu - 5045 - Contest(国家压缩dp)
意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...
- [ACM] hdu 5045 Contest (减少国家Dp)
Contest Problem Description In the ACM International Collegiate Programming Contest, each team consi ...
- HDU 4301 Divide Chocolate (DP + 递推)
Divide Chocolate Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU–5988-Coding Contest(最小费用最大流变形)
Coding Contest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- hdu 4301(基本dp)
题意:就是给你一块2*n的巧克力,让你把它分成x块,并且每一个单位的巧克力各不相同,问有多少种分法? 分析:用dp[i][j][k],表示到巧克力的第二列时,巧克力被分成了j快,k用来表示第i列上下两 ...
- hdu 5045 Contest(状态压缩DP)
题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #i ...
- HDU 5045 Contest
pid=5045">主题链接~~> 做题感悟:比赛时这题后来才写的,有点小尴尬.两个人商议着写写了非常久才写出来,I want to Powerful ,I believe me ...
随机推荐
- MFC学习碎片
(1)MFC程序中弹出框: MessageBox(str,_T("程序执行结果"),MB_OK); AfxMessageBox("Hello&quo ...
- [Node.js] Proxy Requests for Local and Remote Service Parity
High availability apps require that no distinction be made between local and remote services. Attach ...
- APP为什么签名,使用keytool jarsigner进行签名
签名(sign):在应用程序的特定字段写入特定的标记信息,表示该软件已经通过了签署者的审核.过程:使用私有密钥数字地签署一个给定的应用程序 作用: 识别应用程序作者 检測应用程序是否发生改变 有种程序 ...
- Hibernate单向关联N-N
单向N-N关联必须使用连接表. Company实体: package com.ydoing.hibernate5; import java.util.HashSet; import java.util ...
- nyoj19(排列组合next_permutation(s.begin(),s.end()))
题目意思: 从n个数中选择m个数,按字典序输出其排列. pid=19">http://acm.nyist.net/JudgeOnline/problem.php?pid=19 例: 输 ...
- 怎样在同一台电脑使用不同的账号提交到同一个github仓库
近期这段时间使用github.有时在公司办公,想要用git提交代码到自己的github仓库,提交是显示的作者是自己在公司的账户.而不是自己的github账户.这就相当于提交到github的代码不是自己 ...
- STL_算法_依据第n个元素排序(nth_element)
C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) //全部容器适用 nth_element(b,n,e) nth_element(b,n,e,p) 对照:partition() ...
- c10---多文件开发
a.h // // lisi.h // 注意: .h是专门用来被拷贝的, 不会参与编译 #ifndef day05_lisi_h #define day05_lisi_h int sum(int v1 ...
- 点击了一个link button,查看后台调用
使用F12进行监视 本身是一个linkbutton,可以看到绑定了一个JavaScript <a id="gvStaticConnection_ctl02_fresh" hr ...
- Java-SpringCloud:Spring Cloud 是什么
ylbtech-Java-SpringCloud:Spring Cloud 是什么 1.返回顶部 1. 一.概念定义 Spring Cloud是一个微服务框架,相比Dubbo等RPC框架, ...