2012年2月28日

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_ 阅读(187) 评论(0) 推荐(0)

2012年2月27日

ZOJ 2711 Regular Words

摘要: 简单的三维DP,需要注意的是结果很大要用到高精度,假设有a个A,b个B,c个C,f[a][b][c]表示满足条件的排列的种数,且a>=b>=c;那么如果a>b,那么最后一位可以放A;b>c;那么最后一位可以放B;如果C>0,那么最后一位可以放C;于是有f[a][b][c]=f[a-1][b][c]+f[a][b-1][c]+f[a][b][c-1],其中f[X][Y][Z]满足X>=Y>=Z;#include"stdio.h" #include"string.h" typedef char NUM[100]; N 阅读全文

posted @ 2012-02-27 23:39 andy_ 阅读(136) 评论(0) 推荐(0)

ZOJ 2704

摘要: #include"stdio.h" char str[100008],stack[100008]; int info[100008]; main() { int i,s,e,tmp,top,len,start; while(gets(str)!=NULL) { s=-1,e=-1,start=-1,top=0,len=0; for(i=0;str[i];i++) { if(... 阅读全文

posted @ 2012-02-27 23:31 andy_ 阅读(150) 评论(0) 推荐(0)

导航