zoukankan      html  css  js  c++  java
  • dp

    题目链接:http://acm.upc.edu.cn/problem.php?cid=1028&pid=3

    刚刚做的比赛的一道dp题,感觉不错,就拿出来分享一下:

    思路:

    //dp[i][j][k]表示前i个字符算出的值是j并且最后一位为k(0/1)的数的个数
    //dp[i][j][0]=dp[i-1][j][0]+dp[i-1][j][1];
    //dp[i][j][1]=dp[i-1][j-1][1]+dp[i-1][j][0];

    下面的就简单了。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int dp[110][110][2];
     7 //dp[i][j][k]表示前i个字符算出的值是j并且最后一位为k(0/1)的数的个数
     8 //dp[i][j][0]=dp[i-1][j][0]+dp[i-1][j][1];
     9 //dp[i][j][1]=dp[i-1][j-1][1]+dp[i-1][j][0];
    10 
    11 
    12 int main(){
    13     int _case,t,n,k;
    14     dp[1][0][0]=dp[1][0][1]=1;
    15     for(int i=2;i<=100;i++){
    16         for(int j=0;j<i;j++){
    17             dp[i][j][0]=dp[i-1][j][0]+dp[i-1][j][1];
    18             if(j>0){
    19                 dp[i][j][1]=dp[i-1][j-1][1]+dp[i-1][j][0];
    20             }else
    21                 dp[i][j][1]=dp[i-1][j][0];
    22         }
    23     }
    24     scanf("%d",&_case);
    25     while(_case--){
    26         scanf("%d%d%d",&t,&n,&k);
    27         printf("%d %d\n",t,dp[n][k][0]+dp[n][k][1]);
    28     }
    29     return 0;
    30 }
    31 
    32 
    33         
    View Code
  • 相关阅读:
    NumPy 位运算
    NumPy 数组迭代
    NumPy 广播
    NumPy 基于数值区间创建数组
    NumPy 数组切片
    NumPy 基于已有数据创建数组
    NumPy 数组创建
    NumPy 数据类型
    NumPy ndarray
    区块链技术学习指引
  • 原文地址:https://www.cnblogs.com/wally/p/3089721.html
Copyright © 2011-2022 走看看