携程资格赛B题
好吧,连复赛都没进,511.。。。
貌似D题是因为没有用unsigned long long?
4 [] ([])[] ((] ([)]
0 0 3 2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int dp[105][105];
char s[105];
int main()
{
int t,i,j,k,l;
cin>>t;
while(t--)
{
cin>>s;
int len=strlen(s);
for(i=0;i<len;i++)
for(j=0;j<len;j++)
{
if(i<j) dp[i][j]=105;
else if(i==j) dp[i][i]=1;
else dp[i][j]=0;
}
for(l=1;l<len;l++) //段长度递推
{
for(i=0;i<len-l;i++)
{
j=i+l;
if((s[i]==‘(‘&&s[j]==‘)‘)||(s[i]==‘[‘&&s[j]==‘]‘))
dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
for(k=i;k<j;k++)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
//cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
}
}
cout<<dp[0][len-1]<<endl;
}
return 0;
}
/*
23
[]
([])[]
((]
([)]
*/
给定一个自然数M,及其二进制长度N,得到一个N位的二进制串 b1 b2 ... bN-1 bN 将该串做左旋转,即b1移到bN后面,得到一个新的二进制串: b2 b3 ... bN-1 bN b1 对新的二进制串再做左旋转,得二进制串 b3 b4 ... bN-1 bN b1 b2 重复旋转操作操作,可得N个二进制串,对这N个串排序,可得一个N*N的矩阵. 例如: 1 0 0 0 1->0 0 0 1 1->0 0 1 1 0->0 1 1 0 0->1 1 0 0 0 对它们做排序,得矩阵0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 0
问:给出一个自然数M,及其二进制长度N,求出排序矩阵的最后一列。
对于上面的例子,给出M=3,N=5,要你的程序输出10010。
补充说明:存在自然数M的二进制表达超过N位的情况,在这种情况下,取前N次循环的二进制串排序后的最后一列即可。
第一行有一个自然数K,代表有K行测试数据(K<=1000)。 第二行至第K+1行,每行的第一个为自然数M,第二个为二进制长度N(N<64)。
输出K行,每行N个二进制,表示矩阵最后一列从上到下的二进制。
3 3 5 4 7 1099512709120 45
10010 1000000 110000000000000000000000000000100000000000000
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
char a[1005][1005];
int p[1005];
char res[1005];
char tmp[1005];
unsigned long long m;
int n;
int tt;
int main()
{
int t,i,j;
cin>>t;
while(t--)
{
cin>>m>>n;
tt=n;
int t=0;
while(m)
{
p[t++]=m&1;
m>>=1;
}
//cout<<t<<" dsd"<<endl;
while(t+1<=n)
{
p[t++]=0;
}
n=t;
for(i=0;i<n;i++)
{
a[0][i]=p[n-1-i]+‘0‘;
}
a[0][n]=‘\0‘;
for(j=1;j<n;j++)
{
for(i=n-1;i>0;i--)
{
a[j][i-1]=a[j-1][i];
}
a[j][n-1]=a[j-1][0];
a[j][n]=‘\0‘;
}
//cout<<a[1]<<" "<<a[2]<<endl;
for(i=0;i<tt;i++)
for(j=i+1;j<tt;j++)
{
if(strcmp(a[i],a[j])>0)
{
strcpy(tmp,a[i]);
strcpy(a[i],a[j]);
strcpy(a[j],tmp);
}
}
for(i=0;i<tt;i++)
res[i]=a[i][n-1];
res[tt]=‘\0‘;
cout<<res<<endl;
}
return 0;
}
括号匹配(二)NYOJ15(简单区间dp),布布扣,bubuko.com
原文:http://blog.csdn.net/coraline_m/article/details/23621703