poj1015【DP.......无奈了】】的更多相关文章

首先,读题,真是一窍不通.后来看完程序的意思,才明白吧.. 题意: n个人中选m个,条件是取sum|D-P|最小,当有|D-P|相同的时候取|D+P|最大的.然后输出那些m个人的sumD,sumP,最后升序输出m个人的编号.看完题意,想想好像也不难?...瞎想想可能会想出来. 然后看了题解:http://blog.csdn.net/lyy289065406/article/details/6671105 说说感觉吧: 可能一开始去想真的会死命地盯着目标"取最小"不放了.先说说题解DP(…
Jury Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28927   Accepted: 7676   Special Judge Description In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of members of the general…
Preface 这次的题目都是NOI+的题,所以大家的分数都有点惨烈. 依靠T1大力骗分水到Rank2 所以想看正解的话看这里吧 A. 「雅礼NOI2018模拟赛(一) Day1」树 看一眼题目感觉十分不可做,刚开始准备写个状压的 一看数据范围好像是正解了,然而连样例都没有跑过去. 1h之后:完蛋凉凉了,那写个暴力DFS吧 10min之后码完了,想一想能不能多弄点分,这时候ZZ都看出来第一问好做. 于是开始打表,刷第一问的答案时顺便很机智地把第二问的答案也刷了出来. 这个的话直接询问的时候再膜即…
In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of members of the general public. Every time a trial is set to begin, a jury has to be selected, which is done as follows. First, several people are draw…
题目链接:http://poj.org/problem?id=1015 错误解法: 网上很多解法是错误的,用dp[i][j]表示选择i个人差值为j的最优解,用path[i][j]存储路径,循环次序为“选的第几个人->选哪个人->差值之和”或者“选的第几个人->差值之和->选哪个人”,为了避免选择重复的人需要判断.错误的原因是存储路径的方式使得会覆盖一些情况,比如1 3 5和2 4 6均满足dp[3][k]最优时,若采用2 4 6作为dp[3][k]的最优解,而1 3 5 6是最终答…
题目:http://poj.org/problem?id=1015 DP的第一维是选了几个人,第二维是当前D与P的差值,而值存的是当前D与P的和: 技巧1:通过平移避免负角标,即代码中的fix: 技巧2:做完DP后找出最小的差的绝对值时,如下的那一小段代码很有效率: 技巧3(*):记录路径——①更新路径时每次判断是否重复选了一个人,重复则不更新: ][k+P[i]-D[i]]) { t1=j;t2=k; &&Path[t1][t2]!=i)//验证i是否在前面出现过 { t2-=P[Pat…
洛谷传送门 $Sol$ 这是一道具有多个“体积维度”的$0/1$背包问题. 把$N$个候选人看做$N$个物品,那么每个物品有如下三种体积: 1.“人数”,每个候选人的“人数”都是$1$,最终要填满容积为$M$的背包 2.“辩方得分”,$a[i]$ 3.“反方得分”,$b[i]$ 要求的是辩方总分$D$和控方总分$P$的差的绝对值$|D-P|$最小,如果选择方法不唯一,那么在从中选择$D+P$最大的方案 所以将$a[i]-b[i]$作为体积之一,将$a[i]+b[i]$作为该物品的价值 注意这里的…
题目: In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of members of the general public. Every time a trial is set to begin, a jury has to be selected, which is done as follows. First, several people are…
题目:http://poj.org/problem?id=1015 差值是有后效性的,所以“转化为可行性”,开一维记录“能否达到这个差值”. 当然可以开两维分别记录 a 和 b,但 “值只是0或1” 和 “当前元素对应一个 a 只有一个 b ,其他 b 就浪费了” 这两点说明这种状态有优化空间. 开一维记录差值,d数组的值记录最大的 a+b 值较好. 虽然差值是绝对值,但需要分正负以计算.可以全部加一个修正值 fix 解决脚标非负的问题.(不要试图开一维0或1记录正负,会在边界的地方分类讨论而死…
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本是货郎担问题(TSP),状压中挺常出现的问题 f[s][i]表示状态s下到第i个有宝藏的地方,是否能拿到所有s中的宝藏 当然最后还要考虑dis[id[i]][1]是否大于s状态下的宝藏数,取较小值就是答案了 跑了48ms,优化一下应该可以更快.. #include<stdio.h> #includ…