poj-1015(状态转移的方向(01背包)和结果的输出)
#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背包)和结果的输出)的更多相关文章
- POJ Washing Clothes 洗衣服 (01背包,微变型)
题意:有多种颜色的衣服,由两个人合作来洗,必须洗完一种颜色才能洗下一种,求需要多少时间能洗完. 思路:将衣服按颜色分类,对每种颜色进行01背包,容量上限是该种颜色衣服全部洗完的耗时长一半,其实就是在最 ...
- POJ Charm Bracelet 挑饰品 (常规01背包)
问题:去珠宝店抢饰品,给出饰品种数n,能带走的重量m,以及每种饰品的重量w与价值v.求能带走的最大量. 思路:常规01背包. #include <iostream> using names ...
- [Poj 1015] Jury Compromise 解题报告 (完全背包)
题目链接:http://poj.org/problem?id=1015 题目: 题解: 我们考虑设计DP状态(因为这很显然是一个完全背包问题不是吗?) dp[j][k]表示在外层循环到i时,选了j个人 ...
- POJ 2642 The Brick Stops Here 0-1背包
poj: http://poj.org/problem?id=2642 大意: 给出n(n<=200)块黄铜合金,还有它们的浓度和价钱.给出若干个个询问使它们在n块中取 M 块 使得这M块合金的 ...
- POJ 2184:Cow Exhibition(01背包变形)
题意:有n个奶牛,每个奶牛有一个smart值和一个fun值,可能为正也可能为负,要求选出n只奶牛使他们smart值的和s与fun值得和f都非负,且s+f值要求最大. 分析: 一道很好的背包DP题,我们 ...
- POJ 3624.Charm Bracelet-动态规划0-1背包
Charm Bracelet Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 47876 Accepted: 20346 ...
- POJ 2923 【01背包+状态压缩/状压DP】
题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. F ...
- 01背包变种 第k解问题 hdu 2639
先说说普通01包的状态问题吧 普通的01背包,在状态转移的过程中为了求出最优解,一定是遍历了所有的情况 然后再求的最优解.那么对于第k最优解问题,我们只需要再加一个维度,用来记录每一个状态k优解的状态 ...
- luogu P1064|| 01背包||金明的预算
题目描述如下 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过 NNN 元 ...
随机推荐
- js 事件相关 事件处理 封装 事件封装 DOM 0 2 3 级事件
1.绑定 function(element, type, handler){ if (element.addEventListener) { element.add ...
- Vue.js 响应式原理
1. Vue2.x 基于 Object.defineProperty 方法实现响应式(Vue3 将采用 Proxy) Object.defineProperty(obj, prop, descript ...
- "is not allowed to connect" mysql
好像过几次,安装mysql时,总会遇到这个问题. 每次都忘怎么解决. 这回写下来吧. 编辑 mysql数据库的 user表太麻烦了, 最简单的方法是加一个用户,以后就用这个用户登录 CREATE US ...
- OTU rank curve(Rank Abundance 曲线)【基本概念】
16S结题报告中都会有这么一张图: 这张图是OTU Rank曲线,该曲线可以展示样品的多样性.而样品的多样性常通过以下两个方面进行解释:物种的丰富程度和均匀程度.Rank曲线中,曲线在横轴上的跨度越长 ...
- 关于C和C++
最开始学的就是C和C++,但只是学过,根本就不知道怎么使用. 后来接触了Python和Perl才知道怎么将编程应用于实际需求当中,读取文件,存放到数据结构,处理,输出. 但脚本语言有其固有的缺点,不能 ...
- ViewPagerIndicator+viewpager的简单使用,不需要导入Library包
ViewPagerIndicator作为一款分页指标小部件兼容ViewPager,封装上做得非常不错,目前已为众多知名应用所使用. ViewPagerIndicator+viewpager实现如下效果 ...
- layui怎么通过jquery去控制一个本身已经隐藏的div让他通过点击显示出来
$('#test_form_show').removeClass('layui-hide');
- amoba读写分离
原文链接:http://www.abcdocker.com/abcdocker/81 Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件.这个软件致 ...
- Leetcode 89
回溯写到自闭:不想就删了: class Solution { public: vector<int> grayCode(int n) { vector<vector<int&g ...
- VirtualBox + Centos 使用NAT + Host-Only 方式联网
一.准备工作 1. VirtualBox 2. CentOS镜像 备注:我这里准备好了需要下载的文件,有需要的话可以下载一下,分别是VirtualBox-5.1.24-117012-Win.exe,C ...