• noip2001统计单词个数


    最近,迷恋上DEBUG……

    1.首先暴力一遍num[i][j]即从i到j串里包含多少个子串
    (注意首字母的使用)
    2.f[i][j]表示前i个数划分j次,最多单词个数
    f[i][j]=max(f[i][j],f[k][j-1]+num[k+1][i];
    !注意j,k范围

    #include<bits/stdc++.h>
    #define re return
    #define inc(i,l,r) for(int i=l;i<=r;++i)
    const int maxn=205,maxm=2005;
    using namespace std;
    template<typename T>inline void rd(T&x)
    {
    	char c;bool f=0;
    	while((c=getchar())<'0'||c>'9')if(c=='-')f=1;
    	x=c^48;
    	while((c=getchar())>='0'&&c<='9')x=x*10+(c^48);
    	if(f)x=-x;
    }
    
    int p,cnt,k,n,vis[205];
    char s[205],ss[7][205];
    int f[205][205],num[205][205],len[7];
    inline int vivi(int x,int y)
    {
    	int vv=0;
    	inc(i,1,n)
    	if(y-len[i]+1>=x&&!vis[y-len[i]+1])
    	{
    		int fl=0;
    		for(int kk=1;kk<=len[i];++kk)
    		if(s[y-len[i]+kk]!=ss[i][kk])fl=1;
    		if(!fl)
    		{
    			vis[y-len[i]+1]=1;
    			++vv;
    		}
    	}
    	re vv;
    }
    inline void debug(int l)
    {
    	inc(i,1,l)
    	{
    		inc(j,1,l)
    		printf("%d ",f[i][j]);
    		printf("
    ");
    	}
    }
    int main()
    {
    	int x,y,T;
    	freopen("in.txt","r",stdin);
    
    	rd(p),rd(k);
    	inc(i,1,p)
    	scanf("%s",s+(i-1)*20+1);
    	
    	int length=strlen(s+1);
    	rd(n);
    	inc(i,1,n)
    	{
    		scanf("%s",ss[i]+1);
    		len[i]=strlen(ss[i]+1);
    	}
    	inc(i,1,length)
    	{
    		inc(j,i,length)vis[j]=0;
    		inc(j,i,length)
    		{
    			num[i][j]=num[i][j-1];
    			num[i][j]+=vivi(i,j);
    		}
    	}
    	inc(i,1,length)inc(j,1,min(k,i))inc(kk,j-1,i-1)
    	f[i][j]=max(f[i][j],f[kk][j-1]+num[kk+1][i]);
    //	debug(length);
    	printf("%d",f[length][k]);
    	
    }
    

    跟着ns学DP系列

  • 相关阅读:
    2012-2013年度大总结
    [每日一题] 11gOCP 1z0-052 :2013-08-31 数据库的存储结构....................................................A8
    Oracle约束操作
    几道字典树题目
    1032
    uva 10718 Bit Mask(贪心)
    找工作笔试面试那些事儿(2)---内存管理那些事
    汉语-词语:结构
    汉语-词语:形式
    汉语-词语:方向
  • 原文地址:https://www.cnblogs.com/lsyyy/p/11284262.html
Copyright © 2020-2023  润新知