Genera un problema de función: HDU2152Fruit

Descripción del problema
llegó a la estación de la cosecha, debido a la orientación profesional de los TT, Lele obtener una gran cosecha. Especialmente frutas, Lele plantaron un total de N frutas, manzanas, peras, plátanos, sandía ...... no sólo tienen un sabor delicioso, pero también se ven bien.
Mucha gente ha venido aquí para encontrar Lele comprar fruta. Incluso el famoso lcy HDU ACM Zong Jiaotou
vino. lcy lanzar una docena de billetes de cien dólares, "quiero comprar fuente de fruta de la fruta que consiste en H, pero tengo una pequeña petición, ya que en cada fruto, tengo una serie de limitaciones, no puede ser inferior a un determinado valor no puede ser mayor que un cierto valor. y yo no quiero la misma dos platos. mezclar y combinar, se puede establecer el número de programas diferentes, me gustaría comprar una gran cantidad de copias! "
¿Por favor ayuda Lele, ayuda que cuente un recuento al final cuántas porciones de fuente de fruta capaz de vender a la lcy.
Tenga en cuenta que la fruta es una unidad básica puede dividir más. Para ambos programas, si el número de una variedad de frutas son los mismos, entonces los dos programas son los mismos.
Lele finalmente tomó el dinero, y puede continuar sus estudios del ~

Entrada de este título tiene varios conjuntos de prueba, para hacer frente a fin de fichero (EOF). La primera línea de cada ensayo comprende dos números enteros positivos N y M (véase el título describe significados, 0 <n, m <= 100)
la siguiente información N filas de fruta por fila dos enteros A, B (0 <= a <= B <= 100) , a representa un comprar por lo menos la fruta, hasta la B sólo puede comprar la fruta.

Para cada prueba, el número de salida del programa puede ser vendido un total de una línea. La respuesta es asegurarse de que el interesado sea menor de 10 ^ 9

Ejemplo de entrada
2 3
1 2
1 2
3 5
0 3
0 3
0 3

Salida de muestra
2
12

#include<stdio.h>
#include<string.h>
//#include <stdbool.h>
#include <algorithm>
#include<queue>
using  namespace std;
//HDU2152Fruit 首先是需要有一个结构体来存储最大值和最小值
//这题和那些之前的区别在于  首先第一项的(Xmin Xmax) 然后第二项也是 (Xmin Xmax)

//先创建一个结构体
struct f{
    int mmin;
    int mmax;
}F[100];
int main()
{
    int c[100];
    int temp[100];
    int n,m;//分别代表水果的种类和水果的数量
    int i,j,k;
    while(scanf("%d%d",&n,&m)!=EOF){
        //再输入每种类型的最大值和最小值
        for(i=1;i<=n;i++){
            scanf("%d%d",&F[i].mmin,&F[i].mmax);
        }
        //对第一个数值赋初值,先初始化
        memset(temp,0,sizeof(temp));
        memset(c,0,sizeof(c));
        for(i=F[1].mmin;i<=F[1].mmax;i++){
            c[i]=1;
        }
        //然后就开始两项相乘,从第二项开始
        for(i=2;i<=n;i++){
            for(j=0;j<=m;j++){//这是前面一项,之前有个疑点,为什么这里j要从0开始,而不是j代表第一位,从F[1].mmin开始,那是因为当第一项和第二项产生乘积之后
                    //会出现一些原本在第一项中系数为0的次数变成系数不为0,也就是生成新系数 比如 x1*x2=x3
                for(k=F[i].mmin;k<=F[i].mmax&&k+j<=m;k++){//这是后面一项
                    temp[k+j]+=c[j];
                }
            }
            //开始对每一组进行存入最终数据
            for(j=0;j<=m;j++){
                c[j]=temp[j];
                temp[j]=0;
            }
        }
        printf("%d\n",c[m]);//到时候输入这个次数下的系数


    }

}

Publicado 72 artículos originales · ganado elogios 5 · Vistas 2818

Supongo que te gusta

Origin blog.csdn.net/qq_41115379/article/details/104910889
Recomendado
Clasificación