poj 1171(每个字母都不能超过标程的次数,即:不能出现标程没有的字母,标程有的字母出现次数不能超过标程)

复制代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int data[26] = {2,5,4,4,1,6,5,5,1,7,6,3,5,2,3,5,7,2,1,2,4,6,6,7,5,7};
int sum;
int score_target[26],score[26];
void pan(char target[][8],int count){
    for(int i=0;i<count;i++){
        int sum_t = 0;
        memset(score_target,0,sizeof score_target);
        for(int j=0;j<strlen(target[i]);j++){
            int t = target[i][j]-'a';
            if(score_target[t]<score[t]){
                sum_t += data[t];
                score_target[t]++;
            }
            else{
                sum_t = 0;
                break;
            }
        }
        if(sum<sum_t){
            sum = sum_t;
        }
    }
}
int main(){
    char source[10],target[40005][8],target_len3[40005][4],target_len4[40005][5],target_len33[40005][8],target_len34[40005][8];
    int len[40005],count,count3,count4,count33,count34;
    scanf("%s",source);
    memset(score,0,sizeof score);
    for(int i=0;i<strlen(source);i++){
        score[source[i]-'a']++;
    }
    count = 0;
    count3 = 0;
    count4 = 0;
    while(scanf("%s",target[count])!=EOF&&strcmp(target[count],".")!=0){
        len[count] = strlen(target[count]);
        bool flag = true;
        for(int i=0;i<len[count];i++){
            if(score[target[count][i]-'a']==0){
                flag = false;
                break;
            }
        }
        if(flag){
            if(len[count]==3){
                strcpy(target_len3[count3++],target[count]);
            }
            if(len[count]==4){
                strcpy(target_len4[count4++],target[count]);
            }
            count++;
        }
    }
    count33 = 0;
    for(int i=0;i<count3-1;i++){
        for(int j=i+1;j<count3;j++){
            strcpy(target_len33[count33],target_len3[i]);
            strcat(target_len33[count33++],target_len3[j]);
        }
    }
    count34 = 0;
    for(int i=0;i<count3;i++){
        for(int j=0;j<count4;j++){
            strcpy(target_len34[count34],target_len3[i]);
            strcat(target_len34[count34++],target_len4[j]);
        }
    }
    sum = 0;
    pan(target_len33,count33);
    pan(target_len34,count34);
    pan(target,count);
    printf("%d\n",sum); 
    return 0;
}     
复制代码

 

posted @   智人心  阅读(47)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示