zoukankan      html  css  js  c++  java
  • 题目:商人的宣传

    题目描述

    Bruce在A州成立了公司,准备宣传活动开始后的第L天到达B州进行新品拍卖,期间Bruce打算将产品拿到各个州去做推销宣传。 该国有很多个州,每个州都与其他一些州相邻,但是该国有规定:

    商人只能从某些州到达另外一些州,即连通路线是单向的。

    商人不允许在同一个州连续宣传两天或以上,每天宣传完必须离开该州。

    商人可以多次来到同一个州进行宣传。

    任务:算出AB两州之间的路线的总数。

    输入格式

    第一行包含三个整数n,m,L(1≤n,L≤100),表示n个州、m条通路,L天后必须到达B州。

    接下来有m行,每行一对整数x,y(1≤x,y≤n),表示从x州到y州有通路。

    第m+2行:一个整数k(k≤100)

    接下来k行,每行两个整数A,B

    输出格式

    k行,每行一个整数,表示从第k次输入的A州到第k次输入的B州满足规定的路线总数。(<2^31)

    题解:

    该题用的是动态规划。设f[i][j]为第j天到达i州的总方案数。

    动态转移方程:

    f[起始地][0]=1;

    f[i][j]=max{f[i][j],f[k][i-1]+f[i][j]}//map[k][j]=1;

    View Code
     1 #include<iostream>
    2 using namespace std;
    3
    4 int f[101][101];bool map[101][101]={0};
    5
    6 int main()
    7 {
    8 int n,m,l,i,j,k,t;
    9 cin>>n>>m>>l;
    10
    11 for(i=1;i<=m;i++)
    12 {
    13 int x,y;
    14 cin>>x>>y;
    15 map[x][y]=1;
    16 }
    17
    18 cin>>t;
    19 while(t)
    20 {
    21 int x,y;
    22 memset(f,0,sizeof(f));
    23 cin>>x>>y;
    24 f[x][0]=1;
    25
    26 for(i=1;i<=l;i++)
    27 for(j=1;j<=n;j++)
    28 for(k=1;k<=n;k++)
    29 if(map[k][j]==1)
    30 f[j][i]=max(f[j][i],f[k][i-1]+f[j][i]);
    31
    32 cout<<f[y][l]<<endl;
    33 t--;
    34 }
    35
    36 return 0;
    37
    38 }
  • 相关阅读:
    普通锁和分布式锁
    java 正则表达式
    java 字符串转date 格式转换
    消息中间件 kafka
    数据的存储方式:对象存储、文件存储、块存储
    Exceptional Control Flow(6)
    Exceptional Control Flow(5)
    Exceptional Control Flow(4)
    Exceptional Control Flow(3)
    Exceptional Control Flow(2)
  • 原文地址:https://www.cnblogs.com/noip/p/2357576.html
Copyright © 2011-2022 走看看