#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;
int dp[][];
//int path[25][1000];
vector<int> path[][];
int sub[];
int add[];
int n,m,fix;
int main ()
{
int num=;
while (cin>>n>>m&&n&&m) {
memset (dp,-,sizeof(dp));
for (int i=;i<=m;i++)
for (int j=;j<;j++)
path[i][j].clear();
for (int i=;i<=n;i++) {
int d,p; cin>>d>>p;
sub[i]=d-p;
add[i]=d+p;
}
fix=*m; dp[][fix]=;
for (int i=;i<=n;i++) {
for (int x=m-;x>=;x--)
for (int y=;y<=*fix;y++) {//因为sub[i]既可以为正也可以为负,所以状态的转移更新的方向 从x=m-1逆推
if (dp[x][y]>=&&dp[x+][y+sub[i]]<dp[x][y]+add[i]) {
dp[x+][y+sub[i]]=dp[x][y]+add[i];
//path[x+1][y+sub[i]] = i; //这样定义是不行的 因为取m个 当前最优路径是动态的 中间结果可能被再次更新
path[x+][y+sub[i]] = path[x][y];
path[x+][y+sub[i]].push_back(i);
}
}
}
int ans; int a[];
for (int i=;i<=fix;i++) if (dp[m][fix-i]>=||dp[m][fix+i]>=) {ans=i;break;}
ans=dp[m][fix+ans]>dp[m][fix-ans]?ans:-ans;//判断ans的正负
int sum1=(dp[m][fix+ans]+ans)/;
int sum2=(dp[m][fix+ans]-ans)/;
int v=fix+ans;
/* for (int i=m;i>=1;i--) {
a[i]=path[i][v];
//cout<<v<<endl;
v-=sub[a[i]];
}*/
printf( "Jury #%d\n", ++num );
printf( "Best jury has value %d for prosecution and value %d for defence:\n", sum1,sum2);
// for (int i=1;i<=m;i++)
//cout<<" "<<a[i];
for( int i=; i < m; i++ )
printf( " %d", path[m][fix+ans][i]);
cout<<"\n\n";
}
return ;
}

poj-1015(状态转移的方向(01背包)和结果的输出)的更多相关文章

  1. POJ Washing Clothes 洗衣服 (01背包,微变型)

    题意:有多种颜色的衣服,由两个人合作来洗,必须洗完一种颜色才能洗下一种,求需要多少时间能洗完. 思路:将衣服按颜色分类,对每种颜色进行01背包,容量上限是该种颜色衣服全部洗完的耗时长一半,其实就是在最 ...

  2. POJ Charm Bracelet 挑饰品 (常规01背包)

    问题:去珠宝店抢饰品,给出饰品种数n,能带走的重量m,以及每种饰品的重量w与价值v.求能带走的最大量. 思路:常规01背包. #include <iostream> using names ...

  3. [Poj 1015] Jury Compromise 解题报告 (完全背包)

    题目链接:http://poj.org/problem?id=1015 题目: 题解: 我们考虑设计DP状态(因为这很显然是一个完全背包问题不是吗?) dp[j][k]表示在外层循环到i时,选了j个人 ...

  4. POJ 2642 The Brick Stops Here 0-1背包

    poj: http://poj.org/problem?id=2642 大意: 给出n(n<=200)块黄铜合金,还有它们的浓度和价钱.给出若干个个询问使它们在n块中取 M 块 使得这M块合金的 ...

  5. POJ 2184:Cow Exhibition(01背包变形)

    题意:有n个奶牛,每个奶牛有一个smart值和一个fun值,可能为正也可能为负,要求选出n只奶牛使他们smart值的和s与fun值得和f都非负,且s+f值要求最大. 分析: 一道很好的背包DP题,我们 ...

  6. POJ 3624.Charm Bracelet-动态规划0-1背包

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 47876   Accepted: 20346 ...

  7. POJ 2923 【01背包+状态压缩/状压DP】

    题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. F ...

  8. 01背包变种 第k解问题 hdu 2639

    先说说普通01包的状态问题吧 普通的01背包,在状态转移的过程中为了求出最优解,一定是遍历了所有的情况 然后再求的最优解.那么对于第k最优解问题,我们只需要再加一个维度,用来记录每一个状态k优解的状态 ...

  9. luogu P1064|| 01背包||金明的预算

    题目描述如下 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 NNN 元 ...

随机推荐

  1. [ios][swift]UIButton

    参考:http://www.hangge.com/blog/cache/detail_529.html

  2. Android中如何实现EditText的自动换行

    要实现EditText的自动换行需要实现如下设置: <EditText android:id="@+id/function_lifingcost_edit_txtRemark" ...

  3. LeetCode--203--删除链表中的节点

    问题描述: 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3 ...

  4. Vue.js 渲染函数, JSX(未掌握,未学完)

    渲染函数 , JSX(没完成学习) 基础: 实例属性:vm.$slots default 属性包括了所有没有被包含在具名插槽中的节点. 渲染函数: render: function(createEle ...

  5. 3-11 《Ruby元编程》第4章block块 3-12

    第4章代码块blocks 基础知识 作用域:用代码块携带variables through scopes 通过传递block给instance_eval方法来控制作用域. 把block转换为Proc, ...

  6. 看起来很懵的java内存加载面试题

    源代码如下,求结果 public class MemoryAnalyse { public static int k = 0; public static MemoryAnalyse t1 = new ...

  7. AC自动机练习

    多模板串匹配一般有两种方法 暴力kmp, 适用于模板串少的情形 直接trie上暴力, 适用于模板串比较短的情形, 并且可以动态插入合并 建立AC自动机, 复杂度是严格线性的, 但不能动态插入 cons ...

  8. 使用与不使用@RequestBody注解的区别

    1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...

  9. JavaScript学习总结(八)——JavaScript数组

    JavaScript中的Array对象就是数组,首先是一个动态数组,无需预先制定大小,而且是一个像Java中数组.ArrayList.Hashtable等的超强综合体. 一.数组的声明 常规方式声明: ...

  10. POJ 1008 简单模拟题

    e.... 虽然这是一道灰常简单的模拟题.但是米做的时候没有读懂第二个日历的计时方法.然后捏.敲完之后华丽的WA了进一个点.坑点就在一年的最后一天你是该输出本年的.e ...但是我好想并没有..看di ...