• 猫狗大战


    新一年度的猫狗大战通过SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择Terran(人族)并且只能造机枪兵。
    比赛开始了,很快,野猫已经攒足几队机枪兵,试探性的发动进攻;然而,飞狗的机枪兵个数也已经不少了。野猫和飞狗的兵在飞狗的家门口相遇了,于是,便有一场腥风血雨和阵阵惨叫声。由于是在飞狗的家门口,飞狗的兵补给会很快,野猫看敌不过,决定撤退。这时飞狗的兵力也不足够多,所以没追出来。
    由于不允许造医生,机枪兵没办法补血。受伤的兵只好忍了。555-
    现在,野猫又攒足了足够的兵力,决定发起第二次进攻。为了使这次进攻给狗狗造成更大的打击,野猫决定把现有的兵分成两部分,从两路进攻。由于有些兵在第一次战斗中受伤了,为了使两部分的兵实力平均些,分的规则是这样的:1)两部分兵的个数最多只能差一个;2)每部分兵的血值总和必须要尽可能接近。现在请你编写一个程序,给定野猫现在有的兵的个数以及每个兵的血格值,求出野猫按上述规则分成两部分后每部分兵的血值总和。
    输入输出格式
    输入格式:
    第一行为一个整数n(1<=n<=200),表示野猫现在有的机枪兵的个数。以下的n行每行一个整数,表示每个机枪兵的血格(1<=ai<=40)。
    输出格式:
    一行,为两个整数,表示分成两部分后每部分兵的血值总和
    输入输出样例
    输入样例#13
    35
    20
    32
    输出样例#135 52
    题目描述

    解:每部分兵力最多为100人,

          血格值最多为100*40=4000,

    我们可以进行背包,预处理出

    i个人能够构成的所有血格值j,即f[j][i]

    然后按照已经得到的f[j][i],枚举第一部分的血格值,

    从而得到最优解。

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<string>
     5 #include<cstdio>
     6 #include<cmath>
     7 #include<queue>
     8 #define inf 100000000
     9 using namespace std;
    10 int n,f[80010][200];
    11 int sum,ans1,ans2;
    12 int main()
    13 {
    14     scanf("%d",&n);
    15     f[0][0]=1;
    16     for(int i=1,x;i<=n;++i)
    17     {
    18        scanf("%d",&x);
    19        for(int j=8000;j>=x;--j)
    20         for(int k=100;k>=1;--k)    
    21          f[j][k]=f[j][k]||f[j-x][k-1];
    22        sum+=x;
    23     } 
    24     int dep=1e9;
    25     for(int j=sum;j>=0;--j)
    26      if(f[j][n/2] && f[sum-j][n-n/2])
    27      {
    28          int l=min(j,sum-j),r=max(j,sum-j);
    29          if(r-l<dep) ans1=l,ans2=r,dep=r-l;
    30      }
    31     cout<<ans1<<" "<<ans2; 
    32     return 0;
    33 }
    View Code
  • 相关阅读:
    使用自己的key对app进行签名
    pl/sql中文乱码解决办法
    Oracle存储过程中创建表的权限
    pl/sql中获得sql语句执行后影响的行数
    申请Android Map APIKey
    vs快捷键
    ODAC安装配置与使用详解
    .net不安装Oracle11g客户端直接使用ODAC
    android通过USB使用真机调试程序
    pl/sql中实现字符串分割
  • 原文地址:https://www.cnblogs.com/adelalove/p/8908059.html
Copyright © 2020-2023  润新知