思路:背包类DP

提交:3次

错因:没有注意得分的上下界导致 RE 显示 WA

题解:

我们很容易的想到把两种分数做一个差,来尽量背到 \(0\) 。

那最大化总分呢?这时我们可以用两种分数的和作为物品的价值。

记录方案呢?每个状态开一个 vector ,来记录转移的物品。(今天新学)(虽然空间大但是方便写)

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0,f=1;
register char ch; while(!isdigit(ch=getchar())) f=ch=='-'?-1:f;
do x=x*10+(ch^48); while(isdigit(ch=getchar())); return x*f;
} const int N=810;
int T,n,m,cas,D,f[25][N],v[N/4],w[N/4];
vector <int> h[25][N];
inline void main() {
while(~scanf("%d%d",&n,&m)&&n) { memset(f,-1,sizeof f);
for(R i=1;i<=m;++i) for(R j=0;j<N;++j) h[i][j].clear(); D=20*m,f[0][D]=0;
for(R i=1,a,b;i<=n;++i) a=g(),b=g(),v[i]=a-b,w[i]=a+b;
for(R i=1;i<=n;++i) for(R j=m;j;--j) for(R k=max(0,v[i]),lim=2*D+min(0,v[i]);k<=lim;++k) //之前就是 k 的上界写错了。
if(~f[j-1][k-v[i]]) if(f[j-1][k-v[i]]+w[i]>f[j][k])
f[j][k]=f[j-1][k-v[i]]+w[i],h[j][k]=h[j-1][k-v[i]],h[j][k].push_back(i);
R sum; for(sum=0;sum<=D;++sum) if((~f[m][D+sum])||(~f[m][D-sum])) break;
R ans=f[m][D+sum]>f[m][D-sum]?D+sum:D-sum;
R anss=f[m][ans]; R ans1=(anss+(ans-D))/2,ans2=(anss-(ans-D))/2;
printf("Jury #%d\n",++T);
printf("Best jury has value %d for prosecution and value %d for defence:\n",ans1,ans2);
for(R i=0;i<m;++i) printf(" %d",h[m][ans][i]); printf("\n\n");
}
}
} signed main() {Luitaryi::main(); return 0;}

2019.09.18

58

UVA323 Jury Compromise的更多相关文章

  1. ACM - 动态规划 - UVA323 Jury Compromise

    UVA323 Jury Compromise 题解 考虑用动态规划.该问题要求解的最终状态为,选出的 \(m\) 个人,使得辩方总分与控方总分差的绝对值最小,总分之和最大.即 \(\left| D(\ ...

  2. POJ 1015 Jury Compromise(双塔dp)

    Jury Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33737   Accepted: 9109 ...

  3. HDU 1015 Jury Compromise 01背包

    题目链接: http://poj.org/problem?id=1015 Jury Compromise Time Limit: 1000MSMemory Limit: 65536K 问题描述 In ...

  4. poj1015 Jury Compromise【背包】

    Jury Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:32355   Accepted:8722   ...

  5. 背包系列练习及总结(hud 2602 && hdu 2844 Coins && hdu 2159 && poj 1170 Shopping Offers && hdu 3092 Least common multiple && poj 1015 Jury Compromise)

    作为一个oier,以及大学acm党背包是必不可少的一部分.好久没做背包类动规了.久违地练习下-.- dd__engi的背包九讲:http://love-oriented.com/pack/ 鸣谢htt ...

  6. 【题解】Jury Compromise(链表+DP)

    [题解]Jury Compromise(链表+DP) 传送门 题目大意 给你\(n\le 200\)个元素,一个元素有两个特征值,\(c_i\)和\(d_i\),\(c,d \in [0,20]\), ...

  7. poj 1015 Jury Compromise(背包+方案输出)

    \(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...

  8. Jury Compromise

    K - Jury Compromise 参考:ACM POJ 1015 Jury Compromise(陪审团的人选,动态规划题,难) 说实话真有点难想,用一个DP[i][j]来表示在选取i个人,辩控 ...

  9. POJ-1015 Jury Compromise(dp|01背包)

    题目: In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting ...

随机推荐

  1. 【Docker】:使用docker安装redis,挂载外部配置和数据

    普通安装 1.拉取镜像,redis:4.0 docker pull redis:4.0 2.创建redis容器名"redistest1",并开启持久化 docker run -d ...

  2. phpstrom

    在phpstrom 中启用composer 步骤: 1.打开编辑器,选择 文件(file)->设置(setting),找到 Command Line Tool Support ,点击 + 号进行 ...

  3. Python 同级目录import报错

    在使用protobuf时,我们自己了各种Options的时候,在生成的python文件会在同级目录中引用,所以这个时候我们不能做到,加个__init__.py文件了事然后在文件里面写 import m ...

  4. MySQL 解决source 命令导入数据库 乱码

    在我把库.表.sql脚本的编码格式都设置为UTF-8后,任然有乱码,任然有报错: 于是按以下方式重新登录后,解决: mysql -u root -p --default-character-set=u ...

  5. (六)在线文档编辑器的使用和数据字典(ueditor编辑器/my97datepicker日期控件)

    使用ueditor编辑器注意: 1. 要把ueditor的jar包添加到WEB-INF/lib里. 2. 在做图片上传等功能时,必须重写struts的过滤器,否则图片流会被拦截程序无法得到图片. 3. ...

  6. 针对IE6 7 8当独写样式

    IE8的格式: .foot{padding:12px 10px\9;} //在后面加\9 IE7的格式: .foot{*padding:12px 10px\9;} //在前面加* IE6的格式: .f ...

  7. JS错误信息类型

    1.SyntaxError 语法错误 ①变量名不规范 // 变量名不规范 var 1 = 1; 未被捕获的语法错误,这个错误是js机制自动抛出来的 意外的数字 // 下面两个是同一种情况 var 1a ...

  8. 批量删除checkbox前台后台

    <%@ page contentType="text/html;charset=UTF-8" %><%@ include file="/WEB-INF/ ...

  9. Go Select使用

    原文:https://golangbot.com/pointers/ 作者:Nick Coghlan 译者:Noluye 什么是 select? select 语句用于在多个发送/接收信道操作中进行选 ...

  10. Flutter学习之Dart语言基础(构造函数)

    最常见的构造函数形式,即生成构造函数,创建一个类的新实例: class Point { num x, y; //Dart中int和double是num的子类 //this引用当前类对象 Point(n ...