• 题意:有两个数组\(a\)和\(b\),每次比较它们最左端的元素,取小的加入新的数组\(c\),若\(a\)或\(b\)其中一个为空,则将另一个全部加入\(c\),现在给你一个长度为\(2n\)的数组\(c\),问是否能有两个长度为\(n\)的数组\(a\)和\(b\)构成.

  • 题解:我们从左向右看\(c\),记一个最大值\(mx\),观察样例不难发现,跟随在\(mx\)后面比\(mx\)小的元素,它们一定来自同一个数组,比如第三个样例:

    3 2 6 1 5 7 8 4

    \(3,2\)一定来自同一个数组,\(6,1,5\)一定来自同一个数组,\(7\)就一个元素,\(8,4\)一定来自同一个数组,所以我们将它们分段,\((3,2)\),\((6,1,5)\),\((7)\),\((8,4)\).我们要在这些之间凑出一个元素长度为\(n\)的数组即可,这里我们用01背包来解决,我们背包的最大容量为\(n\),去看是否能填满.

  • 代码:

    int t;
    int n;
    int a[N];
    vector<int> v;
    int dp[N]; int main() {
    scanf("%d",&t);
    while(t--){
    scanf("%d",&n);
    me(dp,0,sizeof(dp));
    v.clear();
    for(int i=1;i<=2*n;++i){
    scanf("%d",&a[i]);
    }
    int mx=a[1];
    int pos=1;
    for(int i=2;i<=2*n;++i){
    if(a[i]>mx){
    v.pb(i-pos);
    mx=a[i];
    pos=i;
    }
    }
    v.pb(2*n+1-pos); for(int i=0;i<v.size();++i){
    for(int j=n;j>=v[i];--j){
    dp[j]=max(dp[j],dp[j-v[i]]+v[i]);
    }
    }
    if(dp[n]==n) puts("YES");
    else puts("NO"); } return 0;
    }

最新文章

  1. MongoDB与PostgresQL无责任初步测试
  2. 论SCRM系统对传统行业的冲击
  3. apk支持html video控制 ,是播放状态就暂停,暂停状态就播放
  4. Sql Server 事务隔离级别的查看及更改
  5. bzoj 2806: [Ctsc2012]Cheat 后缀自动机DP
  6. jetty服务器
  7. 我想要个pc和手机共有的客户端,就像百度云(iBarn网盘好用)
  8. Windows搭建Sublime Text 3 + Go开发环境
  9. 洛谷-三连击(升级版)-BOSS战-入门综合练习1
  10. sqlite数据库之简单操作
  11. nodejs-url网址解析的好帮手
  12. Java实现栈之计算器
  13. docker load 镜像时出现:open /var/lib/docker/tmp/docker-import-500852078/repositories: no such file or dir
  14. react 入坑笔记(四) - React 事件绑定和传参
  15. 手机连接WiFi有感叹号x怎么回事?如何消除手机WiFi感叹号?
  16. BarTender怎样同时打印自动日期和流水号?
  17. 【vs2010】转换到 COFF 期间失败: 文件无效或损坏
  18. Linux partprobe命令详解
  19. arm-linux-gcc配置安装
  20. lintcode-65-两个排序数组的中位数

热门文章

  1. 【Linux】history用法
  2. 【Oracle】row_number() over(partition by )函数用法
  3. 使用SimpleUpdater实现现有程序升级功能
  4. Ubuntu20.04 安装火狐开发者版本(水狐)步骤
  5. python爬虫如何提高效率
  6. Py数据类型—列表,字典,元组
  7. ubuntu qt5.8 编译qtwebkit
  8. 思考gRPC :为什么是HTTP/2
  9. 为什么要内存对齐?Go 语言有时也需要考虑对齐的问题
  10. session和cookie自动登录机制