摘要:
先将题目中的还变成链,把环截断,复制一份放在后面形成一个两倍的链,max[i][j]表示从i到j最大得分,同理有min(i,j),sum(i) 表示到i的石子串的总数量。状态转移方程max[i][j]=max{max[i][k]+max[k+1][j]}+sum[j]-sum[i-1] min[i][j]=min{min[i][k]+min[k+1][j]}+sum[j]-sum[i-1] 1 #include 2 3 int main() 4 { 5 int i,j,k,tag1,tag2,n,v[202],sum[202],max[202][202],min[20... 阅读全文
摘要:
状态转移方程 L[i]=L[i-w[j]]+v[j] if(L[i] 2 #include 3 4 #define N 100+1 5 int main() 6 { 7 int i,j,k,n,m,l,w[N],v[N],L[2001],L1[2001]; 8 scanf("%d %d %d",&n,&m,&l); 9 for(i=1;i=w[i];j--)16 {17 if(L[j]m)20 continue;21 L[j]=L[j-w[i]]+v[i];22 ... 阅读全文
摘要:
状态转移方程 s[i][j]=s[i-rmb[k]][j-rp[k]]+1 if(s[i][j] 2 #include 3 4 5 #define N 100+1 6 7 int main() 8 { 9 int n,i,j,k,m,r,rmb[N],rp[N],time[N],s[N][N],c[N][N];10 scanf("%d",&n);11 for(i=1;i=rmb[i];j--)21 {22 for(k=r;k>=rp[i];k--)23 {24 25 ... 阅读全文
摘要:
将字符串与本身的反转字符串求最长公共子序列。 1 #include 2 #include 3 4 int main() 5 { 6 char s[5001],r[5001]; 7 short v[2][5001]; 8 int i,j,n; 9 scanf("%s",s);10 strcpy(r,s);11 strrev(r);12 if(s[0]==r[0])13 {14 v[0][0]=1;15 }16 else17 {18 v[0][0]=0;19 }20 ... 阅读全文