#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. 《剑指offer》第三_一题(找出数组中重复的数字,可改变数组)

    // 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次.请 ...

  2. URAL 1183 Brackets Sequence

    URAL 1183 思路:区间dp,打印路径,详见http://www.cnblogs.com/widsom/p/8321670.html 代码: #include<iostream> # ...

  3. Lua面向对象 --- 单例

    GameManager.lua: --单例模式是利用一个全局表来实现的 GameManager = {} Manager = {__index = GameManager} function Game ...

  4. eclipse启动时弹出Failed to create the Java Virtual Machine

    eclipse启动时弹出Failed to create the Java Virtual Machine 一.现象 今天装eclipse的时候出现Failed to create the Java ...

  5. GetTitleAndUrl

    Sub GetTitleAndUrl() Dim strText As String Dim i As Long Dim OneA Dim IsContent As Boolean Dim PageI ...

  6. shell中引号的妙用

    #!/bin/bashfile=('leon 01.cap' leon-02.cap nicky-01.cap whoareu-01.cap 8dbb-01.cap)dict=(simple.txt ...

  7. django-rest-framework登陆认证

    # -*- coding: utf-8 -*- __author__ = 'YongCong Wu' # @Time : 2018/10/23 15:05 # @Email : : 192287802 ...

  8. layui的富文本编辑器怎么赋值

    除了上面讲的方法外,还可以使用layedit自带的方法赋值/*** 设置编辑器内容* @param {[type]} index 编辑器索引* @param {[type]} content 要设置的 ...

  9. android升级adt和sdk之后无法识别SDK Location的一个解决方式

    我把android的adt和sdk从4.0升级到4.2,发现eclipse的android设置里面原来列出的各种api level的platform消失了,而且无法新建android工程.而且检查过了 ...

  10. kill prefix hemi hexa hepta holo input 1

    1● hemi 0.5 2● hexa 6 3● hepta 7 4● holo 100%