woj 1049 dp
来源:互联网 发布:常用的排序算法 编辑:程序博客网 时间:2024/06/05 00:41
题目链接:http://acm.whu.edu.cn/learn/problem/detail?problem_id=1049
//dp[i]表示以i结尾最少可以由多少个单词构成,如果单词j是i的后缀,//那么dp[i]=min(dp[i],dp[i-length(word[j])]+1);#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <cmath>using namespace std;bool is_houzui(char *s,char *a,int i){ int ii,jj; for(ii=i,jj=strlen(a)-1;jj>=0;ii--,jj--) { if(s[ii]!=a[jj]) break; } if(jj<0) return true; else return false;}int main(){ freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int ncase,n,i,j; char s[257],a[101][257]; cin>>ncase; while(ncase--) { getchar(); cin>>s; cin>>n; getchar(); for(i=0;i<n;i++) cin>>a[i]; int dp[256]; dp[0]=0; for(i=0;i<strlen(s);i++) { dp[i+1]=dp[i]+1; for(j=0;j<n;j++)//这里是整个程序最耗时的地方,没有想怎么优化 if(strlen(a[j])<=i+1) if(is_houzui(s,a[j],i)) dp[i+1]=min(dp[i+1],dp[i-strlen(a[j])+1]+1); //cout<<dp[i+1]<<endl; } cout<<dp[strlen(s)]<<endl; } return 0;}
- woj 1049 dp
- hdu 2697 WOJ dp
- WOJ 1608 状压dp
- WOJ-29 Werewolf(DP)
- Woj 1608 - Calculation 状压dp
- WOJ
- woj
- woj Divide by Six 数位dp
- WOJ 29 Werewolf(树形DP+枚举)
- woj~24. Divide by Six(dp)
- WOJ 题目1538 B - Stones II (DP)
- woj-Divide by Six (dp)(方法巧妙)
- WOJ Your NP has been charged full(普通dp)
- WOJ 1020
- WOJ 1014
- WOJ 1055
- WOJ-1402
- WOJ--1314
- 动态创建CIpaddressCtrl或CEdit控件
- Discuz出现UCenter应用通信失败总结
- eclipse快捷键
- 利用MVC模式开发Java应用程序(转自网络,作者龚赤兵)
- 黑马程序员_java基础之二
- woj 1049 dp
- PCRE函数简介和使用示例
- POJ_2485(Prim算法)
- SOAP tomcat7.0 HelloWorld
- PHP 5.3中的命名空间:你用过了么?
- hdu 1394 Minimum Inversion Number(线段树解法)
- ubuntu 安装
- 浏览器的同源策略类别及处理
- js取小数点后几位