zoukankan      html  css  js  c++  java
  • poj 2184 Cow Exhibition

    // 给定n头牛,每头有属性智商和幽默感,这两个属性值有正有负,现在要从这n头牛中选出若干头使得他们的智商和与幽默感和不为负数,
    // 并且两者两家和最大,如果无解输出0,n<=100,-1000<val<1000.
    // 这题是好题 思路来自以下博客
    // http://blog.csdn.net/woshi250hua/article/details/7633450

    // 我开始想的是 dp[i][j][k] 放置i头牛 智商为j 幽默感为 k 是否存在 然后发现空间不允许呀、、
    // 别人思路 : 将智商作为容量 幽默感作为 价值 瞬间醒悟、原来可以这样的、、然后就是普通背包了
    // 1A
    #include <iostream> #include <algorithm> #include <queue> #include <math.h> #include <stdio.h> #include <string.h> using namespace std; #define MOD 1000000007 #define maxn 200010 int dp[maxn]; int S[110],F[110]; int main() { int N; while(scanf("%d",&N)!=EOF){ int i,j,k; int len=0,le=0; for(i=1;i<=N;i++) { scanf("%d %d",&S[i],&F[i]); if(S[i]>=0) len+=S[i]; else le+=(-S[i]); } len=max(len,le); for(i=1;i<=2*len;i++) dp[i]=-MOD; dp[0]=0; // memset(dp,0,sizeof(dp)); for(i=1;i<=N;i++) if(S[i]>=0){ // 根据这个判断转移方向
    for(j=len;j>=S[i]-len;j--){ k=j-S[i]; if(k<0) k=-k+len; if(j<0) j=-j+len; dp[j]=max(dp[j],dp[k]+F[i]); if(j>len) j=len-j; } }else{ for(j=-len;j<=len+S[i];j++){ k=j-S[i]; if(k<0) k=-k+len; if(j<0) j=-j+len; dp[j]=max(dp[j],dp[k]+F[i]); if(j>len) j=len-j; } } int ans=0; for(i=0;i<=len;i++) if(dp[i]>=0) ans=max(ans,i+dp[i]);//,printf("%d %d?",i,dp[i]); printf("%d ",ans); } return 0; }
  • 相关阅读:
    JS替换字符串多余的空格符
    WebStorm2017.3.4版本 注册码
    使用$.getJSON()需要注意的地方
    45道CSS基础面试题(附答案)
    单机版搭建Hadoop环境图文教程详解
    Ubuntu下安装JDK图文详解
    VMtools安装以及设置
    Ubuntu 12.04中文输入法的安装
    Hadoop 学习之 FAQ
    java ant 命令大全
  • 原文地址:https://www.cnblogs.com/372465774y/p/3191250.html
Copyright © 2011-2022 走看看