随笔分类 -  dp

poj3670 eating together 简单的dp
摘要:方法一:LIS/LDS#include"stdio.h" int lis[30001],lds[30001]; int main() { int n,t,len1=0,len2=0,i,left,right,mid; lds[0]=0x7fffffff; lis[0]=-1; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&t); if(t>=lis[le... 阅读全文

posted @ 2012-03-06 17:02 andy_ 阅读(233) 评论(0) 推荐(0)

HDOJ 2602 Bone Collector 01背包问题
摘要:#include"stdio.h" #include"string.h" #include"stdlib.h" #define MAX 1010 int f[MAX],value[MAX],cost[MAX]; main() { int i,v,n,t,j; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&v); memset(f,0,sizeof(f)); ... 阅读全文

posted @ 2012-02-28 00:34 andy_ 阅读(204) 评论(0) 推荐(0)

HDOJ 1114 Piggy-Bank 完全背包
摘要:#include"stdio.h" //#include"stdlib.h" #define INF 100000000 #define maxn 10010 int p[510],w[510],f[maxn]; int min(int a,int b) {return a<b?a:b;} main() { int a,b,t,i,j,v,n; scanf("%d",&t); while(t--) { scanf("%d%d",&a,&b); ... 阅读全文

posted @ 2012-02-28 00:26 andy_ 阅读(166) 评论(0) 推荐(0)

HDOJ 1024 Max Sum Plus Plus
摘要:ans=max{dp[m,j]}(m<=j<=n)其中dp[m,j]为数组中前j个数的m段的最大和,且第m个段包含a[j];而dp[i][j]=max{dp[i,j-1]+a[j],max{dp[i-1,t]+a[j]}}(i-1=<t<j);dp[i][j]只与dp[i][j-1]及i-1阶段j之前的max(dp[i-1][t])有关,故只保存当前阶段的dp值和用b数组保存上一阶段的最大值#include"stdio.h" #define MIN 0x80000000 #define N 1000001 int a[N],b[N],dp[N]; m 阅读全文

posted @ 2012-02-28 00:00 andy_ 阅读(189) 评论(0) 推荐(0)

导航