数目nullRQNOJ-302-统计单词个数--区域dp
2013-05-18 19:28
281 查看
改章节是一篇关于数目null的帖子
思路:
s[i][j]: 在i到j的区间内,有以i扫尾的字典则为1,否则,为0
sum[i][j]: 在i到j的区间内所包容的字典的数目
if(s[i][j]==1)sum[i][j]=sum[i+1][j]+1;
else sun[i][j]=sum[i+1][j];
dp[i][j]: 表示在0~j的区间内,分红i份,所包含的字典的总和。
dp[i][j]=dp[i-1][k]+sum[k+1][j](i-2<=k<j)
dp[1][j]=sum[1][j];
每日一道理
信念是巍巍大厦的栋梁,没有它,就只是一堆散乱的砖瓦;信念是滔滔大江的河床,没有它,就只有一片泛滥的波浪;信念是熊熊烈火的引星,没有它,就只有一把冰冷的柴把;信念是远洋巨轮的主机,没有它,就只剩下瘫痪的巨架。
文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。
思路:
s[i][j]: 在i到j的区间内,有以i扫尾的字典则为1,否则,为0
sum[i][j]: 在i到j的区间内所包容的字典的数目
if(s[i][j]==1)sum[i][j]=sum[i+1][j]+1;
else sun[i][j]=sum[i+1][j];
dp[i][j]: 表示在0~j的区间内,分红i份,所包含的字典的总和。
dp[i][j]=dp[i-1][k]+sum[k+1][j](i-2<=k<j)
dp[1][j]=sum[1][j];
每日一道理
信念是巍巍大厦的栋梁,没有它,就只是一堆散乱的砖瓦;信念是滔滔大江的河床,没有它,就只有一片泛滥的波浪;信念是熊熊烈火的引星,没有它,就只有一把冰冷的柴把;信念是远洋巨轮的主机,没有它,就只剩下瘫痪的巨架。
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #include<queue> #include<stack> #include<map> #include<string> #include<stdlib.h> #define INF_MAX 0x7fffffff #define INF 999999 #define max3(a,b,c) (max(a,b)>c?max(a,b):c) #define min3(a,b,c) (min(a,b)<c?min(a,b):c) #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; struct node { int u; int v; int w; bool friend operator < (node a, node b){ return a.w < b.w; } }edge[1001]; int gcd(int n,int m){if(n<m) swap(n,m);return n%m==0?m:gcd(m,n%m);} int lcm(int n,int m){if(n<m) swap(n,m);return n/gcd(n,m)*m;} char dic[10][201]; char str[201]; char st[21]; int sum[201][201]; int s[201][201]; int p,k,ss; int main() { int i,j,n; scanf("%d%d%*c",&p,&k); for(i=0;i<p;i++) { gets(st); for(j=i*20;j<i*20+20;j++) { str[j]=st[j-i*20]; } } n=p*20; scanf("%d%*c",&ss); for(i=0;i<ss;i++) { gets(dic[i]); } int mi,is,ks; for(i=0;i<n;i++) { mi=n; for(j=0;j<ss;j++) { if(str[i]==dic[j][0]) { for(ks=0;ks<strlen(dic[j])&&(i+ks)<n;ks++) { if(str[ks+i]!=dic[j][ks])break; } if(ks==strlen(dic[j]))mi=min(mi,i+ks-1); } } for(is=mi;is<n;is++) { s[i][is]=1; } } for(i=0;i<n;i++) sum[n-1][i]=s[n-1][i]; for(i=n-2;i>=0;i--) { for(j=i;j<n;j++) { if(s[i][j]==1)sum[i][j]=sum[i+1][j]+1; else sum[i][j]=sum[i+1][j]; } } int dp[10][201]; /* for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%2d ",sum[i][j]); } puts(""); }*/ for(i=0;i<n;i++) { dp[1][i]=sum[0][i]; } for(i=2;i<=k;i++) { for(j=0;j<n;j++) { dp[i][j]=0; for(ks=i-2;ks<j;ks++) { dp[i][j]=max(dp[i][j],dp[i-1][ks]+sum[ks+1][j]); } } } cout<<dp[k][n-1]<<endl; return 0; }
文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。
相关文章推荐
- RQNOJ-302-统计单词个数--区域dp
- RQNOJ 302 PID302 / [NOIP2001]统计单词个数(区间dp)
- Hadoop编程入门,统计单词出现数目wordcount
- Vijos P1118 统计单词个数(动态规划,划分型DP,字符串)
- DP-统计单词个数
- 练习2-3:编一个程序用来打开文件并统计文件中以空格隔开的单词数目
- 统计字符串中的单词数目
- [一天一项目]统计字符串中的单词数目
- 统计单词数目及单词首字母大写
- 模拟基础之统计字符串中的英文单词数目
- 【codevs1040】【01NOIPTG】统计单词个数,字符串的划分DP
- 《征服c指针》学习笔记-----统计文本单词数目的程序word_count
- 第16周报告--任务5---统计其中出现的单词数目
- 统计字符串中的单词数目
- ACM 94. [NOIP2001] 统计单词个数(划分dp)
- 多线程统计多个文件的单词数目---C++0x多线程使用示例
- Java 文件统计:编写程序,统计英文文本文件中的字符数目和单词数目。程序运行时,输入要统计的文件的名称,程序处理后输出字符数目和单词数目
- NOIP2001统计单词个数[序列DP]
- C语言实现二叉树-利用二叉树统计单词数目
- 打开文件并统计以空格隔开的单词数目