poj 2184 Cow Exhibition(dp之01背包变形)
Description
- "Fat and docile, big and dumb, they look so stupid, they aren't much
- fun..."
- - Cows with Guns by Dana Lyons
- The cows want to prove to the public that they are both smart and fun. In order to do this, Bessie has organized an exhibition that will be put on by the cows. She has given each of the N ( <= N <= ) cows a thorough interview and determined two values for each cow: the smartness Si (- <= Si <= ) of the cow and the funness Fi (- <= Fi <= ) of the cow.
- Bessie must choose which cows she wants to bring to her exhibition. She believes that the total smartness TS of the group is the sum of the Si's and, likewise, the total funness TF of the group is the sum of the Fi's. Bessie wants to maximize the sum of TS and TF, but she also wants both of these values to be non-negative (since she must also show that the cows are well-rounded; a negative TS or TF would ruin this). Help Bessie maximize the sum of TS and TF without letting either of these values become negative.
Input
- * Line : A single integer N, the number of cows
- * Lines ..N+: Two space-separated integers Si and Fi, respectively the smartness and funness for each cow.
Output
- * Line : One integer: the optimal sum of TS and TF such that both TS and TF are non-negative. If no subset of the cows has non-negative TS and non- negative TF, print .
Sample Input
- -
- -
- -
- - -
Sample Output
Hint
- OUTPUT DETAILS:
- Bessie chooses cows , , and , giving values of TS = -++ = and TF
- = -+ = , so + = . Note that adding cow would improve the value
- of TS+TF to , but the new value of TF would be negative, so it is not
- allowed.
Source
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<cmath>
- #include<stdlib.h>
- using namespace std;
- #define inf 1<<30
- #define N 106
- int dp[];
- int a[N],b[N];
- int main()
- {
- int n;
- while(scanf("%d",&n)==){
- for(int i=;i<n;i++){
- scanf("%d%d",&a[i],&b[i]);
- }
- //memset(dp,inf,sizeof(dp));
- for(int i=;i<;i++){
- dp[i]=-inf;
- }
- dp[]=;
- for(int i=;i<n;i++){
- //if(a[i]<0 && b[i]<0) continue;
- if(a[i]>){
- for(int j=;j>=a[i];j--){
- dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
- }
- }
- else{
- for(int j=a[i];j<=+a[i];j++){
- dp[j]=max(dp[j],dp[j-a[i]]+b[i]);
- }
- }
- }
- int ans=;
- for(int i=;i<=;i++){
- if(dp[i]>=){
- ans=max(ans,dp[i]+i-);
- }
- }
- printf("%d\n",ans);
- }
- return ;
- }
- #include <stdio.h>
- #include <string.h>
- #include <algorithm>
- using namespace std;
- int dp[];
- const int inf = <<;
- int main()
- {
- int n,s[],f[],i,j,ans;
- while(~scanf("%d",&n))
- {
- for(i = ; i<=; i++)
- dp[i] = -inf;
- dp[] = ;
- for(i = ; i<=n; i++)
- scanf("%d%d",&s[i],&f[i]);
- for(i = ; i<=n; i++)
- {
- if(s[i]< && f[i]<)
- continue;
- if(s[i]>)
- {
- for(j = ; j>=s[i]; j--)//如果s[i]为整数,那么我们就从大的往小的方向进行背包
- if(dp[j-s[i]]>-inf)
- dp[j] = max(dp[j],dp[j-s[i]]+f[i]);
- }
- else
- {
- for(j = s[i]; j<=+s[i]; j++)//为负数则需要反过来
- if(dp[j-s[i]]>-inf)
- dp[j] = max(dp[j],dp[j-s[i]]+f[i]);
- }
- }
- ans = -inf;
- for(i = ; i<=; i++)//因为区间100000~200000才是表示的整数,那么此时的i就是之前背包中的s[i],如果此时dp[i]也就是f[i]大于等于0的话,我们再加上s[i](此时为i),然后减去作为界限的100000,就可以得到答案
- {
- if(dp[i]>=)
- ans = max(ans,dp[i]+i-);
- }
- printf("%d\n",ans);
- }
- return ;
- }
poj 2184 Cow Exhibition(dp之01背包变形)的更多相关文章
- POJ 2184 Cow Exhibition【01背包+负数(经典)】
POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...
- [POJ 2184]--Cow Exhibition(0-1背包变形)
题目链接:http://poj.org/problem?id=2184 Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total S ...
- POJ 2184 Cow Exhibition (01背包变形)(或者搜索)
Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10342 Accepted: 4048 D ...
- poj 2184 Cow Exhibition(01背包)
Cow Exhibition Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10882 Accepted: 4309 D ...
- POJ 2184 Cow Exhibition (01背包的变形)
本文转载,出处:http://www.cnblogs.com/Findxiaoxun/articles/3398075.html 很巧妙的01背包升级.看完题目以后很明显有背包的感觉,然后就往背包上靠 ...
- POJ 2184 Cow Exhibition 01背包
题意就是给出n对数 每对xi, yi 的值范围是-1000到1000 然后让你从中取若干对 使得sum(x[k]+y[k]) 最大并且非负 且 sum(x[k]) >= 0 sum(y[k] ...
- POJ 2184 Cow Exhibition (带负值的01背包)
题意:给你N(N<=100)只牛,每只牛有一个智慧值Si和一个活泼值Fi,现在要从中找出一些来,使得这些牛智慧值总和S与活泼值总和F之和最大,且F和S均为正.Si和Fi范围在-1000到1000 ...
- poj 2184 Cow Exhibition(背包变形)
这道题目和抢银行那个题目有点儿像,同样涉及到包和物品的转换. 我们将奶牛的两种属性中的一种当作价值,另一种当作花费.把总的价值当作包.然后对于每一头奶牛进行一次01背包的筛选操作就行了. 需要特别注意 ...
- POJ - 2184 Cow Exhibition 题解
题目大意 有 \(N(N \le 100)\) 头奶牛,没有头奶牛有两个属性 \(s_i\) 和 \(f_i\),两个范围均为 \([-1000, 1000]\). 从中挑选若干头牛,\(TS = \ ...
随机推荐
- hibernate jpa 注解 @Temporal(TemporalType.DATE) 格式化时间日期,页面直接得到格式化类型的值
1.日期: @Temporal(TemporalType.DATE) @Column(name = "applyDate", nullable = false, length = ...
- Oracle Berkeley DB Java 版
Oracle Berkeley DB Java 版是一个开源的.可嵌入的事务存储引擎,是完全用 Java 编写的.它充分利用 Java 环境来简化开发和部署.Oracle Berkeley DB Ja ...
- linux权限及ntfs文件系统权限的知识
关于ntfs权限的问题 文件的权限: [-dcbps][u:rwx][g:rwx][a:rwx] 当中: r=4, w=2, x=1, u=owner, g=group, a=all user ...
- (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)
刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...
- Tomcat全攻略
内容: 一:简单介绍 二:安装及配置 三:应用 四:综述 參考资料 关于作者 相关内容: TCP/IP 介绍 TCP/IP 介绍 !== End Related dW Content Area --& ...
- (转)ASP.NET 伪静态
1.伪静态:http://www.cnblogs.com/Default.html 目的就是为了赢得更多的收入,至于真否,待SEOer 解答,正如文字所说,伪静态就是假的静态. 2.准备工作:下载Ur ...
- ASP.net导出Excel的几种方式
2.导出多个sheet页的Excel 在Office Excel 中设计好 导出的格式,然后另存为xml电子表格,然后用记事本打开保存的xml文件,复制内容放入程序Response.Write() 输 ...
- iOS 中实现随机颜色
开发中为了测试能够快速看到效果很多时候我们对颜色采用随机颜色 代码块如下 UIColor * randomColor= [UIColor colorWithRed:((float)arc4random ...
- H5原生拖拽事件
使用原生js实现简单的拖拽事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- 层次查询start with ... connect by
如:select distinct dep_id from t_sys_dep_dimensions start with dep_id = (select dept_id from t_sys_pe ...