括号匹配(二)NYOJ15(简单区间dp)(一)

2014-11-24 11:48:55 · 作者: · 浏览: 4

携程资格赛B题

好吧,连复赛都没进,511.。。。

貌似D题是因为没有用unsigned long long



括号匹配(二)

时间限制:1000 ms | 内存限制:65535 KB 难度:6
描述
给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
输入
第一行输入一个正整数N,表示测试数据组数(N<=10)
每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100
输出
对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行
样例输入
4
[]
([])[]
((]
([)]
样例输出
0
0
3
2
来源
《算法艺术与信息学竞赛》

开始想的是直接暴力搞,不过这样很多都不会考虑到,匹配括号是一个范围的匹配问题。会想到区间dp,dp[i][j]代表i到j之间匹配最少需要添加多少符号,如果s[i]==s[j]那么dp[i][j]=dp[i+1][j-1],然后随时更新区间之类的最小值,详见代码,dp初始化需要注意。
题目地址:http://acm.nyist.net/JudgeOnline/problem.php pid=15
AC代码:
#include
      
       
#include
       
         #include
        
          #include
         
           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
          
           

旋转的二进制

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2119 Accepted Submission(s): 339


Problem Description
给定一个自然数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次循环的二进制串排序后的最后一列即可。

Input
第一行有一个自然数K,代表有K行测试数据(K<=1000)。
第二行至第K+1行,每行的第一个为自然数M,第二个为二进制长度N(N<64)。

Output
输出K行,每行N个二进制,表示矩阵最后一列从上到下的二进制。

Sample Input
3
3 5
4 7
1099512709120 45

Sample Output
10010
1000000
110000000000000000000000000000100000000000000


还是贴上自己的搓代码吧,最近好多比赛,一直在水。。。
#include
            
             
#include
             
               #include
              
                #include
               
                 #include
                
                  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<
                 
                  0;i--) { a[j][i-1]=a[j-1][i]; } a[j][n-1]=a[j-1][0]; a[j][n]='\0'; } //cout<
                  
                   0) { strcpy(tmp,a[i]); strcpy(a[i],a[j]); strcpy(a[j],tmp); } } for(i=0;i
                   
                    



<script type="text/java script">
<script type="text/java script">BAIDU_CLB_fillSlot("771048");
点击复制链接 与好友分享! 回本站首页
<script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }
分享到: 更多
<script type="text/java script" id="bdshare_js" data="type=tools&uid=12732"> <script type="text/java script" id="bdshell_js"> <script type="text/java script"> var bds_config = {'snsKey':{'tsina':'2386826374','tqq':'5e544a8fdea646c5a5f3967871346eb8'}}; document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js cdnversion=" + Math.ceil(new Date()/3600000)
您对本文章有什么意见或着疑问吗?请到 论坛讨论您的关注和建议是我们前行的参考和动力
上一篇: C++ Primer 学习笔记_23_函数(续2) --局部对象、内联函数、类的成员函数
下一篇: C++单元测试总结(一)
相关文章
<script type="text/java script">BAIDU_CLB_fillSlot(