[POJ1015]Jury Compromise
2024-10-12 12:55:14
题目大意:要求你从n个人中选出m个,每个人有两个值p[i],D[i],要求选出的人p总和与D总和的差值最小。若有相同解,则输出p总+D总最大的方案。
动态规划。
一直在想到底是n枚举外面还是m放外面,好像两者都可以?
做了越来越多的那种“当前层改变下一层”,乍一看题解还以为这是道斜率优化呢。
#include<cstdio> #include<cstring> #include<algorithm> #define inf 1000000000 using namespace std; int cas,minpd,n,m; ][],path[][],answer[]; ],b[]; int main() { scanf("%d%d",&n,&m); ||m!=) { cas++;printf("Jury #%d\n",cas); ;i<=n;i++)scanf("%d%d",&a[i],&b[i]); memset(f,-,,sizeof(path)); minpd=m*; f[][minpd]=; ;j<m;j++) ;k<=minpd*;k++) ;i<=n;i++) &&f[j][k]+a[i]+b[i]>f[j+][k+a[i]-b[i]]) { int t1=j,t2=k; &&path[t1][t2]!=i) { t2-=a[path[t1][t2]]-b[path[t1][t2]];t1--; } ) { f[j+][k+a[i]-b[i]]=f[j][k]+a[i]+b[i]; path[j+][k+a[i]-b[i]]=i; } } ,k; &&f[m][i-j]<)j++; if(f[m][i+j]<f[m][i-j])k=i-j;else k=i+j; printf("Best jury has value %d for prosecution and value %d for defence:\n", (k-minpd+f[m][k])/,(f[m][k]-k+minpd)/); ;i<=m;i++) { answer[i]=path[m-i+][k]; k-=a[answer[i]]-b[answer[i]]; } sort(answer+,answer+m+); ;i<=m;i++)printf("%d ",answer[i]); printf("\n\n"); scanf("%d%d",&n,&m); } }
poj1015
最近感觉剪贴板出了点问题,代码提交上去动不动就是too long。。。
最新文章
- iOS9支付宝无法调起客户端
- ios合并静态库
- 自适应网页设计(Responsive Web Design)
- (转)SVN分支/合并原理及最佳实践
- 2016 ICPC北京站现场赛总结(再度流水账)
- SQL 数据结构操作语句
- 双机倒换(NewStartHA,SKYbility,hacmp,hp unix双机)
- 【转】文件同步软件FreeFileSync
- typedef与define的区别
- Oracle11g R2学习系列 之六数据库链接,快照及序列
- 机器学习Matlab打击垃圾邮件的分类————朴素贝叶斯模型
- 屏幕居中(DIV/CSS) 的几种方法(转)
- Xcode版本太低引发的bug,xcode各种版本下载方式详解
- Go语言基础之反射
- 【原创】大叔经验分享(2)为什么hive在大表上加条件后执行limit很慢
- [security CRT] VB实现自动下载脚本
- SQL Server生成数据库的数据字典存储过程
- 使用Jekins自动构建项目(GitLab+Java Maven)
- 3.1-uC/OS-III的特点:
- 提高Bash使用效率的方法