描述

新一年度的猫狗大战通过SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择Terran(人族)并且只能造机枪兵。

比赛开始了,很快,野猫已经攒足几队机枪兵,试探性的发动进攻;然而,飞狗的机枪兵个数也已经不少了。野猫和飞狗的兵在飞狗的家门口相遇了,于是,便有一场腥风血雨和阵阵惨叫声。由于是在飞狗的家门口,飞狗的兵补给会很快,野猫看敌不过,决定撤退。这时飞狗的兵力也不足够多,所以没追出来。

由于不允许造医生,机枪兵没办法补血。受伤的兵只好忍了。555-
现在,野猫又攒足了足够的兵力,决定发起第二次进攻。为了使这次进攻给狗狗造成更大的打击,野猫决定把现有的兵分成两部分,从两路进攻。由于有些兵在第一次战斗中受伤了,为了使两部分的兵实力平均些,分的规则是这样的:1)两部分兵的个数最多只能差一个;2)每部分兵的血值总和必须要尽可能接近。现在请你编写一个程序,给定野猫现在有的兵的个数以及每个兵的血格值,求出野猫按上述规则分成两部分后每部分兵的血值总和。

格式

输入格式

第一行为一个整数n(1<=n<=200),表示野猫现在有的机枪兵的个数。以下的n行每行一个整数,表示每个机枪兵的血格(1<=ai<=40)。

输出格式

只有一行,包含两个数,即野猫的每部分兵的血值总和,较小的一个值放在前面,两个数用空格分隔。

样例1

样例输入1

3
35
20
32

样例输出1

35 52

限制

各个测试点1s

提示

TO 狗狗:这道题的数据范围我已经尽量按星际的游戏规则来了,如果你再固执于由于机枪兵的攻击力一定使不能达到某些血格值或者游戏中一定要造农民不能使机枪兵的人数达到200的话,我只能决定将那场猫狗大战的录像公开于世人了!!!

一道简单的背包,f[i][j][k]表示前i个一部分是j个值为k能否取到,

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<cstdlib>
 7 #include<vector>
 8 using namespace std;
 9 typedef long long ll;
10 typedef long double ld;
11 typedef pair<int,int> pr;
12 const double pi=acos(-1);
13 #define rep(i,a,n) for(int i=a;i<=n;i++)
14 #define per(i,n,a) for(int i=n;i>=a;i--)
15 #define Rep(i,u) for(int i=head[u];i;i=Next[i])
16 #define clr(a) memset(a,0,sizeof(a))
17 #define pb push_back
18 #define mp make_pair
19 #define fi first
20 #define sc second
21 #define pq priority_queue
22 #define pqb priority_queue <int, vector<int>, less<int> >
23 #define pqs priority_queue <int, vector<int>, greater<int> >
24 #define vec vector
25 ld eps=1e-9;
26 ll pp=1000000007;
27 ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
28 ll powmod(ll a,ll b,ll pp){ll ans=1;for(;b;b>>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;}
29 void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
30 //void add(int x,int y,int z){ v[++e]=y; next[e]=head[x]; head[x]=e; cost[e]=z; }
31 int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,-1,1};
32 ll read(){ ll ans=0; char last=' ',ch=getchar();
33 while(ch<'0' || ch>'9')last=ch,ch=getchar();
34 while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
35 if(last=='-')ans=-ans; return ans;
36 }
37 int a[1000],sum,f[1000][10000];
38 int main()
39 {
40     int n=read();
41     for (int i=1;i<=n;i++) a[i]=read(),sum+=a[i];
42     f[0][0]=1;
43     for (int i=1;i<=n;i++)
44         for (int j=(n/2);j>=1;j--)
45             for (int k=a[i];k<=sum;k++){
46                 f[j][k]=f[j][k]|f[j-1][k-a[i]];
47             }
48     for (int i=(sum/2);i>=0;i--)
49     if (f[n/2][i]) {
50         cout<<i<<" "<<sum-i;
51         break;
52     }
53     return 0;
54  }  

View Code

看见有人用bitset写,我也用了一发,

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<cstdlib>
 7 #include<vector>
 8 using namespace std;
 9 typedef long long ll;
10 typedef long double ld;
11 typedef pair<int,int> pr;
12 const double pi=acos(-1);
13 #define rep(i,a,n) for(int i=a;i<=n;i++)
14 #define per(i,n,a) for(int i=n;i>=a;i--)
15 #define Rep(i,u) for(int i=head[u];i;i=Next[i])
16 #define clr(a) memset(a,0,sizeof(a))
17 #define pb push_back
18 #define mp make_pair
19 #define fi first
20 #define sc second
21 #define pq priority_queue
22 #define pqb priority_queue <int, vector<int>, less<int> >
23 #define pqs priority_queue <int, vector<int>, greater<int> >
24 #define vec vector
25 ld eps=1e-9;
26 ll pp=1000000007;
27 ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
28 ll powmod(ll a,ll b,ll pp){ll ans=1;for(;b;b>>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;}
29 void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
30 //void add(int x,int y,int z){ v[++e]=y; next[e]=head[x]; head[x]=e; cost[e]=z; }
31 int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,-1,1};
32 ll read(){ ll ans=0; char last=' ',ch=getchar();
33 while(ch<'0' || ch>'9')last=ch,ch=getchar();
34 while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
35 if(last=='-')ans=-ans; return ans;
36 }
37 #include<bitset>
38 int a[1000],sum;
39 bitset<10000> f[1000];
40 int main()
41 {
42     int n=read();
43     for (int i=1;i<=n;i++) a[i]=read(),sum+=a[i];
44     f[0][0]=1;
45     for (int i=1;i<=n;i++)
46         for (int j=(n/2);j>=1;j--)
47             f[j]=f[j]|(f[j-1]<<a[i]);
48     for (int i=(sum/2);i>=0;i--)
49     if (f[n/2][i]) {
50         cout<<i<<" "<<sum-i;
51         break;
52     }
53     return 0;
54  }  

View Code

以上代码能AC,但是是错的!!!

反例:5

      1 1 1 1 10

我也是后来才发现的,因为你只枚举n/2的所以要找遍所有的值。

正解:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<cstdlib>
 7 #include<vector>
 8 using namespace std;
 9 typedef long long ll;
10 typedef long double ld;
11 typedef pair<int,int> pr;
12 const double pi=acos(-1);
13 #define rep(i,a,n) for(int i=a;i<=n;i++)
14 #define per(i,n,a) for(int i=n;i>=a;i--)
15 #define Rep(i,u) for(int i=head[u];i;i=Next[i])
16 #define clr(a) memset(a,0,sizeof(a))
17 #define pb push_back
18 #define mp make_pair
19 #define fi first
20 #define sc second
21 #define pq priority_queue
22 #define pqb priority_queue <int, vector<int>, less<int> >
23 #define pqs priority_queue <int, vector<int>, greater<int> >
24 #define vec vector
25 ld eps=1e-9;
26 ll pp=1000000007;
27 ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;}
28 ll powmod(ll a,ll b,ll pp){ll ans=1;for(;b;b>>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;}
29 void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
30 //void add(int x,int y,int z){ v[++e]=y; next[e]=head[x]; head[x]=e; cost[e]=z; }
31 int dx[5]={0,-1,1,0,0},dy[5]={0,0,0,-1,1};
32 ll read(){ ll ans=0; char last=' ',ch=getchar();
33 while(ch<'0' || ch>'9')last=ch,ch=getchar();
34 while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
35 if(last=='-')ans=-ans; return ans;
36 }
37 int a[1000],sum,f[1000][10000];
38 int main()
39 {
40     int n=read();
41     for (int i=1;i<=n;i++) a[i]=read(),sum+=a[i];
42     f[0][0]=1;
43     for (int i=1;i<=n;i++)
44         for (int j=(n/2);j>=1;j--)
45             for (int k=a[i];k<=sum;k++){
46                 f[j][k]=f[j][k]|f[j-1][k-a[i]];
47             }
48     int Min=100000000,ans=0;
49     for (int i=0;i<=sum;i++)
50     if (f[n/2][i])
51         if (abs(sum-i-i)<Min) ans=i,Min=abs(sum-i-i);
52     if (ans>(sum/2))
53         cout<<sum-ans<<" "<<ans<<endl;
54     else cout<<ans<<" "<<sum-ans<<endl;
55     return 0;
56  }  

View Code

转载于:https://www.cnblogs.com/SXia/p/7117012.html

vijos1153 猫狗大战相关推荐

  1. vijos1153猫狗大战

    新一年度的猫狗大战通过SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择Terran(人族)并且只能造机枪兵. 比赛开始了,很快, ...

  2. dp训练第27题 vijos1153 猫狗大战 背包

    给定一个整数n(200)和n个数(40). 要求将这些数分组,使得个数最多差1且数字和最接近. 做法很多,这里列举一种 题意要求从n个数中选择n/2个,并使得和与总和的一半最为接近. 状态表示:可以用 ...

  3. vijos1153:猫狗大战

    描述 新一年度的猫狗大战通过SC(星际争霸)这款经典的游戏来较量,野猫和飞狗这对冤家为此已经准备好久了,为了使战争更有难度和戏剧性,双方约定只能选择Terran(人族)并且只能造机枪兵. 比赛开始了, ...

  4. 深度学习之基于AlexNet实现猫狗大战

    这次实验的主角并不是猫狗大战,而是AlexNet网络,只不过数据集为猫狗大战数据集.本次实验利用自己搭建的AlexNet网络实现猫狗大战,测试一下AlexNet网络的性能. AlexNet网络作为Le ...

  5. 基于tensorflow2.0实现猫狗大战(搭建网络迁移学习)

    猫狗大战是kaggle平台上的一个比赛,用于实现猫和狗的二分类问题.最近在学卷积神经网络,所以自己动手搭建了几层网络进行训练,然后利用迁移学习把别人训练好的模型直接应用于猫狗分类这个数据集,比较一下实 ...

  6. 使用猫狗大战数据集进行一次完整的TensorFlow训练

    1.简介 一直想将图片制作成tfrecords文件,然后在模型中运行一下.最初想用的数据集是mnist,但是跑的过程中一直出现问题.找到这一篇知乎上的博客,写的非常不错. 原博客地址:https:// ...

  7. 第四次作业:猫狗大战挑战赛

    文章目录 1. 导入需要的包,检查使用设备 2. 导入数据集并修改数据集目录结构 3. 数据处理 4. 创建VGG Model 5. 修改最后一层,冻结前面层的参数 6. 训练并测试全连接层 7.可视 ...

  8. python猫狗大战pytorch_深度学习实战---猫狗大战(pytorch实现)

    数据准备 猫狗大战数据集下载链接 微软的数据集已经分好类,直接使用就行, 数据划分 我们将猫和狗的图片分别移动到训练集和验证集中,其中90%的数据作为训练集,10%的图片作为验证集,使用shutil. ...

  9. 猫狗大战——基于TensorFlow的猫狗识别(2)

    微信公众号:龙跃十二 我是小玉,一个平平无奇的小天才! 上篇文章我们说了关于猫狗大战这个项目的一些准备工作,接下来,我们看看具体的代码详解. 猫狗大战--基于TensorFlow的猫狗识别(1) 文件 ...

最新文章

  1. iphone11边框喇手问题_苹果全系 iPhone 11 频频翻车,问题频频呈现,你的新机占几点...
  2. VS2017登陆不了,TFS无法连接成功的问题
  3. linux c 环境变量函数 getenv putenv 简介
  4. 当对象与原型有相同的属性,调用时的上下文指向问题
  5. c++ 交换变量实践
  6. 「 每日一练,快乐水题 」1984. 学生分数的最小差值
  7. 我的内核学习笔记10:Intel GPIO驱动源码分析
  8. SQL 智能提示工具
  9. 弘辽科技:电商壹周大事
  10. 请给孩子多一点点空间
  11. button和submit的区别
  12. 检查更新时出错:无法启动更新检查(错误代码为 3: 0x80040154)
  13. DSS 部署环境需求清单
  14. python之bt种子,dht网络共享热门资源
  15. java项目统一打印入参出参等日志
  16. python3新式类_Python之新式类与经典类
  17. 什么是大端法和小端法?
  18. Google pieCharts的学习
  19. 百度android apk 加固,百度开放应用加固保护技术 支持Andorid L系统
  20. 《无声告白》 读书笔记

热门文章

  1. multisim中运放在哪找
  2. word中对号、差号、圈的快速插入
  3. 【Unity学习笔记】Unity中的欧拉角(Euler Angle)和万向节(Gimbal)
  4. 【报告分享】品牌营销数智化转型白皮书-阿里研究院群邑GroupM(附下载)
  5. 你见过几次四大天王同台啊
  6. 1-十六烷基-3-三乙氧基丙基硅烷咪唑溴盐离子液体([HDTIm]Br)和1-十八烷基-3-三乙氧基丙基硅烷咪唑溴盐离子液体([ODTIm]Br)修饰磁性纳米颗粒(MNPs)
  7. 骑马与砍杀:风云三国 for Mac(角色扮演游戏)
  8. Udacity数据分析(进阶试学)-五王之战分析 - 冰与火之歌
  9. 传感器集成温度传感器(DS1820)温度特性实验
  10. TOPWAY智能彩色TFT液晶显示模块