动态规划(DP)
文章平均质量分 65
siaswj
这个作者很懒,什么都没留下…
展开
-
拦截导弹
/** 程序的版权和版本声明部分:* Copyright (c) 2014,郑州大学SIAS国际学院* 作 者: 王 杰* 完成日期:2014 年 4 月 28 日** 对任务及求解方法的描述部分:* 输入描述: 略或见注释、总结* 问题描述: 略或见注释、总结* 程序输出: 略或见注释、总结* 问题分析: 略或见注释、总结* 算法设计: 略或见注释、总结*/原创 2014-04-28 10:41:54 · 652 阅读 · 0 评论 -
01背包、完全背包、多重背包 总结小讲
首先说下动态规划,动态规划这东西就和递归一样,只能找局部关系,若想全部列出来,是很难的,比如汉诺塔。你可以说先把除最后一层的其他所有层都移动到2,再把最后一层移动到3,最后再把其余的从2移动到3,这是一个直观的关系,但是想列举出来是很难的,也许当层数n=3时还可以模拟下,再大一些就不可能了,所以,诸如递归,动态规划之类的,不能细想,只能找局部关系。原创 2014-07-01 17:18:48 · 820 阅读 · 0 评论 -
最大子串和
#includeint main(){ int t,n,x,i,j,sum,max; scanf("%d",&t); for(i=1;i<=t;i++){ scanf("%d",&n); max=-101; sum=0; for(j=1;j<=n;j++){ scanf("%d",&原创 2014-07-06 20:20:44 · 1619 阅读 · 0 评论 -
超级台阶
#include#includeusing namespace std;void f();int dp[50]={0};int main(){ f(); int n,m; scanf("%d",&n); while(n--){ scanf("%d",&m); printf("%d\n",dp[m]); }原创 2014-05-21 15:34:09 · 683 阅读 · 0 评论 -
最大子矩阵和
//压缩行,DP列,备忘录max#include#include#include#include using namespace std;int a[105][105],b[105][105];int main(){ //freopen("最大子矩阵和.txt","r",stdin); int t,m,n,i,j,max; cin>>t; whi原创 2014-07-08 15:46:51 · 742 阅读 · 0 评论 -
士兵杀敌(二)
//数据结构 之 树状数组#include#include#includeusing namespace std;int c[1000005];int n;int lowbit(int k){ return k&(-k); //return k&(k^(k–1));}void add(int i,int x){ while(i<=n){原创 2014-07-09 16:31:40 · 705 阅读 · 0 评论 -
士兵杀敌(一)
#include#include#includeusing namespace std;int sum[1000000];int main(){ int n,m,t,i,a,b; memset(sum,0,sizeof(sum)); scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ scanf("%d",原创 2014-07-08 17:59:50 · 680 阅读 · 0 评论 -
DP问题各种模型的状态转移方程-总结
1(最长公共子串(注意和最长公共子序列区别))两个字符串str1和str2,长度分别为(l1,l2)dp[i][j]表示以两个字符串分别以第i和第j个字符结尾所能达到的公共子序列的长度,由于下面涉及到i-1和j-1,那么这个时候我们一般从i=1和j=1开始到i<=len1, j。 if(str[i-1]=str[j-1]) dp[i][j]=转载 2014-07-14 16:16:31 · 1222 阅读 · 0 评论 -
A problem about date
#include#includeusing namespace std;int main(){ int c,y,m,d,w; while(scanf("%d%d%d",&y,&m,&d)!=EOF){ //用个cin,cout还超时。。。。 if(m==1){ m=13; y--; }原创 2014-07-14 12:24:30 · 627 阅读 · 0 评论 -
01串
#includeusing namespace std;int main(){ int n,m,i,dp[50]; dp[2]=3; dp[3]=5; for(i=4;i<=40;i++) dp[i]=dp[i-1]+dp[i-2]; cin>>n; while(n--){ cin>>m; co原创 2014-07-14 16:39:00 · 605 阅读 · 0 评论 -
拦截导弹
#include#includeusing namespace std;int main(){ int t,n,i,j,a[21],dp[21]; cin>>t; while(t--){ cin>>n; for(i=0;i<n;i++){ cin>>a[i]; dp[i]=1;原创 2014-05-29 18:20:10 · 732 阅读 · 0 评论 -
矩形嵌套(南阳理工OJ&&省赛H题)
#include#include#includeusing namespace std;typedef struct node{ int w,l;}node;bool cmp(node p,node q){ if(p.w==q.w) return p.l<q.l; return p.w<q.w;}int main(){ //freopen(原创 2014-05-29 22:11:09 · 955 阅读 · 0 评论 -
邮票分你一半
//01背包,把邮票总面值和的一半当做背包容量#include#include#include#define max(a,b) a>b? a:busing namespace std;int main(){ int m,n,v[1005],i,j,sum,dp[100005]; cin>>m; while(m--){ memset(v,0,s原创 2014-06-29 21:10:35 · 694 阅读 · 0 评论 -
飞翔(最长单调递增子序列)
#include#include#include#includeusing namespace std;typedef struct node{ int x,y;}node;bool cmp(node a,node b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x;}node p[10原创 2014-07-15 16:56:01 · 803 阅读 · 0 评论 -
01背包小讲(DP)
01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] }f[i,j]表示在前i件物品中选择若干件放在承重为 j 的背包中,可以取得的最大价值。Pi表示第i件物转载 2014-05-23 16:46:26 · 814 阅读 · 0 评论 -
最长单调递增子序列
#include#include#includeusing namespace std;int main(){ int n,i,j,sum[10005]; char s[10005]; cin>>n; while(n--){ cin>>s; int l=strlen(s); for(i=0;i<l;i++)原创 2014-05-29 18:10:16 · 752 阅读 · 0 评论 -
单调递增子序列(二)(n*logn)
#include#includeusing namespace std;//二分查找求下界int lowerb(int arr[],int x,int y,int v){ int m; while(x<y){ m=x+(y-x)/2; if(arr[m]>=v) y=m; else原创 2014-06-13 21:20:26 · 846 阅读 · 0 评论 -
苹果
#include#includeusing namespace std;int max(int a,int b){ return a=a>b? a:b;}int main(){ int n,v,i,j,dp[1003],c,w; while(cin>>n>>v && (n || v)){ memset(dp,0,sizeof(dp));原创 2014-06-29 14:00:36 · 624 阅读 · 0 评论 -
开心的小明
#include#include#includeusing namespace std;int max(int a,int b){ a=a>b? a:b; return a;}int main(){ //freopen("开心的小明.txt","r",stdin); int t,n,m,v,w,i,j,dp[30005]; cin>>t;原创 2014-06-28 13:10:11 · 856 阅读 · 0 评论 -
最长公共子序列
#include#include#includeusing namespace std;int main(){ //freopen("LCS.txt","r",stdin); int t,i,j; char s1[1002],s2[1002]; cin>>t; while(t--){ cin>>s1>>s2; in原创 2014-06-11 11:18:41 · 705 阅读 · 0 评论 -
完全背包
#include#include#includeusing namespace std;int dp[50005],c[100005],w[100005];int main(){ //freopen("完全背包.txt","r",stdin); int n,m,v,i,j; cin>>n; while(n--){ cin>>m>>v;原创 2014-06-29 19:30:37 · 678 阅读 · 0 评论 -
zb的生日
总结:跟邮票分你一半 一样原创 2014-06-29 21:13:57 · 711 阅读 · 0 评论 -
聪明的kk
#include#includeusing namespace std;int max(int a,int b){ a=a>b? a:b; return a;}int main(){ int n,m,i,j,a[23][23],dp[23][23]; while(cin>>n>>m){ memset(dp,0,sizeof(dp))原创 2014-06-29 14:07:25 · 893 阅读 · 1 评论