题目描述
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]);
}