zoukankan      html  css  js  c++  java
  • 九度 1552:座位问题(二维DP)

    题目描述

    总结:

    1. dp[i][0] 第 i 个位置上座男生方案数, dp[i][1] 第 i 个位置上座女生方案数

    2. dp[i][0] = dp[i-1][0] + dp[i-1][1], straight forward

    3. dp[i][0] = dp[i-2][0] + dp[i-3][0] +... dp[0][0] 枚举第一个男生出现的位置, 出现该男生之前的位子上座的都是女生

    代码

    /*
     * source.cpp
     *
     *  Created on: 2014-4-4
     *      Author: vincent
     */
    
    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    using namespace std;
    
    
    int cal(int n) {
    	int dp[1010][2];
    	int dpsum[1010]; // dpsum[i] = dp[i][1] + dp[i-1][1]...
    
    	dp[0][0] = 0; dp[1][0] = 1;
    	dp[0][1] = 0; dp[1][1] = 0;
    	dpsum[0] = 1; dpsum[1] = 2;
    
    	for(int i = 2; i <= n; i ++) {
    		dp[i][0] = dp[i-1][0] + dp[i-1][1];
    		dp[i][0] %= 1000000007;
    
    		dpsum[i] = dpsum[i-1]+dp[i][0];
    		dpsum[i] %= 1000000007;
    
    		dp[i][1] = dpsum[i-2];
    		dp[i][1] %= 1000000007;
    	}
    
    	return (dp[n][0] + dp[n][1])%1000000007;
    }
    
    int main() {
    	freopen("input.txt", "r", stdin);
    	int n;
    	while(scanf("%d", &n) != EOF) {
    		printf("%d
    ", cal(n));
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    类的创建
    线性规划
    break、continue、pass介绍
    array numpy 模块
    hive字符串函数
    进化的Spark, 从DataFrame说起
    hive sql split 分隔符
    Spark On YARN内存分配
    浅谈Spark应用程序的性能调优
    Spark-Mllib(二)基本统计
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3646034.html
Copyright © 2011-2022 走看看