HDU 5155(dp)
来源:互联网 发布:2016淘宝上传图片尺寸 编辑:程序博客网 时间:2024/05/09 13:49
问题描述:
一个盒子由
现在有求盒子从左边看过去,每一行都闪烁着光芒,从前面看过去,每一列也都闪烁着光芒。
问:盒子里的宝石有多少种分布情况。
答案有可能很大,所以输出答案对
输入描述:
多组输入数据
每组数据一行,输入两个数
输出描述:
每组数据输出一行,一个整数,代表方案数
官方题解:
还有一种解法是用排列组合加容斥,而且找博客的时候还看到好多用这种解法的,果然还是大神比较多。不过dp还是比较简单的。
看了别人的博客上的图讲的还挺清楚:
情况1:
情况2:
综上两种情况,得到状态转移公式:
AC代码:
也可以在
#include <iostream>#include <cstdio>#include <stack>#include <queue>#include <cstring>using namespace std;#define ll long longconst int mod=1e9+7;ll mod_pow(ll a,ll n,ll p){ ll ret=1,A=a; while(n) { if (n & 1) ret=(ret*A)%p; A=(A*A)%p; n>>=1; } return ret;}ll c[55][55];///组合数ll dp[55][55];ll pow[55];///2的i次方int main(){// freopen("in.in","r",stdin);// freopen("test.out","w",stdout); int n,m; pow[0]=1; for(int i=1;i<55;i++) { pow[i]=(pow[i-1]*2)%mod; } c[0][0]=1; for(int i=1;i<=55;i++) { c[i][0]=1; c[i][i]=1; for(int j=0;j<=i;j++) { c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; } } while(~scanf("%d%d",&n,&m)) { if(n==0||m==0) printf("0\n"); else if(n==1||m==1) { printf("1\n"); } else { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) dp[i][1]=1; for(int i=2;i<=m;i++) dp[1][i]=1; for(int i=2;i<=n;i++) { for(int j=2;j<=m;j++) { dp[i][j]=(dp[i][j-1]*(pow[i]-1)%mod+mod)%mod; for(int k=1;k<i;k++) { dp[i][j]=((dp[i][j]+(dp[i-k][j-1]*c[i][k])%mod*pow[i-k]%mod)+mod)%mod; } } } printf("%I64d\n",dp[n][m]); } } return 0;}
0 0
- hdu 5155(DP)
- HDU 5155(dp)
- hdu 5155(DP+排列组合)
- HDU 5155 dp
- HDU 1024(DP)
- HDU 1087(DP)
- HDU 1506(DP)
- hdu 1058 (DP)
- hdu 1208 (DP)
- hdu 4502(DP)
- hdu 4561(DP)
- hdu 1292 (dp)
- hdu 2182 (dp)
- hdu 2955(DP)
- hdu 2546(dp)
- hdu 3466 (dp)
- hdu 3186(dp)
- hdu 1203(dp)
- nagios自写插件如何通过pnp4nagios绘图
- Log4j2实现异步日志
- ncurses及简单使用
- 触摸精灵脚本使用snapshotScreen截图错误
- Android智慧北京之轮播图与下拉、上拉刷新
- HDU 5155(dp)
- MySQL和Lucene索引对比分析
- Codeforces 706d 字典树+贪心
- Phpfetcher - a simple web crawler framework
- Android Studio:常见使用问题处理
- iOS开发笔记>> runTime 运行时机制简介
- Canvas 绘制动态效果线框
- LeetCode:378 Kth Smallest Element in a Sorted Matrix
- 分享一下我研究SQLSERVER以来收集的笔记