大小PIPI II(二维01背包)

题目描述

PIPI国有两种人,一种叫小PIPI,一种叫大PIPI。现在PIPI国想建设工厂,每个工厂都需要一定数量的大PIPI和一定数量的小PIPI,每个工厂都会用一个字符串表示所需要的大PIPI和小PIPI(字符串中大PIPI用P表示,小PIPI用p表示)。现在一共有n个大PIPI以及m个小PIPI ,请问PIPI国最多能够建设多少个工厂? 每个大PIPI和每个小PIPI都只能去一个工厂。

输入

第一行输入三个数字 n , m , t ,分别代表 大PIPI数量,小PIPI数量和待建设的工厂数量 (1<=n,m,t<=500)。
接下来每行一个字符串代表每个工厂所需的大PIPI和小PIPI, 每个字符串长度不超过1000。

输出

输出一行,代表PIPI国最多能够建设多少个工厂。

样例输入

3 5 5
Pp
pppP
PPPppP
P
p

样例输出

4

#include<bits/stdc++.h>
using namespace std;
int big[505],small[505],dp[505][505];
int main(){
    int n,m,t;
    char s[1005];
    scanf("%d%d%d",&n,&m,&t);
    for(int i=0;i<t;i++){
        scanf("%s",s);
        int len=strlen(s);
        for(int j=0;j<len;j++){
            if(s[j]=='P'){
                big[i]++;
            }else if(s[j]=='p'){
                small[i]++;
            }
        }
    }
        for(int i=0;i<t;i++){
            for(int j=n;j>=big[i];j--){
                for(int k=m;k>=small[i];k--){
                    dp[j][k]=max(dp[j][k],dp[j-big[i]][k-small[i]]+1); 
                }
            }
        }
    printf("%d\n",dp[n][m]);
}
发布了78 篇原创文章 · 获赞 7 · 访问量 4547

猜你喜欢

转载自blog.csdn.net/weixin_44433678/article/details/105184692
今日推荐