【解题报告】[动态规划] RQNOJ - PID105 / 核电站问题
2014-04-21 22:27
281 查看
原题地址:http://www.rqnoj.cn/problem/105
解题思路:
状态表示:
数组dp[i][j]中的j拆成M位二进制(后缀B表示)。
如:M=3时
dp[5][000B]表示第3,4,5都不放核物质的情况的总数。显然,dp[5][000B]=dp[5][001B]=dp[4][000B]+dp[4][100B]。特殊的是dp[i][111B]=0。
初始状态:
dp[0][000B]=dp[0][001B]=1,dp[0][i]=0(001B<i<=111B)
状态转移方程:
dp[i][j]=dp[i-1][ (j>>1) + (1<<(N-1)) ]+dp[i-1][j>>1]。 0<=j<((1<<n)-1)
解题代码:
View Code
解题思路:
状态表示:
数组dp[i][j]中的j拆成M位二进制(后缀B表示)。
如:M=3时
dp[5][000B]表示第3,4,5都不放核物质的情况的总数。显然,dp[5][000B]=dp[5][001B]=dp[4][000B]+dp[4][100B]。特殊的是dp[i][111B]=0。
初始状态:
dp[0][000B]=dp[0][001B]=1,dp[0][i]=0(001B<i<=111B)
状态转移方程:
dp[i][j]=dp[i-1][ (j>>1) + (1<<(N-1)) ]+dp[i-1][j>>1]。 0<=j<((1<<n)-1)
解题代码:
#include<stdio.h> #include<iostream> using namespace std; long long dp[50][70]={1,1}; int main() { long long n,m,i,j; scanf("%lld%lld",&n,&m); for(i=1;i<n;i++) { for(j=0;j<((1<<m)-1);j++) { dp[i][j]=dp[i-1][(j>>1LL)+(1<<(m-1LL))]+dp[i-1][j>>1LL]; } } i--; long long s=0; for(j=0;j<((1<<m)-1);j++) { s+=dp[i][j]; } printf("%lld\n",s); return 0; }
View Code
相关文章推荐
- 【解题报告】[动态规划] RQNOJ - PID273 / 马棚问题
- 【解题报告】[动态规划] RQNOJ PID106 / 最大加权矩形
- 【解题报告】[动态规划] RQNOJ - PID38 / 串的记数
- 【解题报告】[动态规划]RQNOJ - PID72 / 拔河比赛
- 【解题报告】[动态规划] RQNOJ - PID15 / 采药
- 【解题报告】[动态规划]RQNOJ - PID82 / 又上锁妖塔
- 【解题报告】[动态规划]RQNOJ PID2 / 开心的金明
- rqnoj-105-核电站问题-dp
- 0-1背包问题,poj 3624 Charm Bracelet动态规划-解题报告,增加最优路径构建
- 核电站问题 解题报告
- RQNOJ 39 饮食问题 解题报告
- rqnoj-105-核电站问题-dp
- SDUT 3014 硬币问题 (动态规划) -- 解题报告
- 【解题报告】[动态规划]-PID69 / 过河卒
- 【解题报告】[动态规划] - PID90 / 未出现的子串
- 0-1背包问题(动态规划) 解题报告
- TYVJ3119 RQNOJ105 VIJOS1232 核电站问题 题解
- 【解题报告】[动态规划] RQNOJ PID5 / 能量项链
- 一中OJ #1453 马棚问题 | 动态规划 序列分组DP | 解题报告
- Rqnoj105 核电站问题 题解