zoukankan      html  css  js  c++  java
  • BZOJ1334:[Baltic2008]Elect(背包DP)

    Description

    N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党的席位仍大于总数的一半,则这个政党被称为是多余的,这是不允许的.

    Input

    第一行给出有多少个政党.其值小于等于300
    下面给出每个政党的席位数.总席位数小于等于 100000

    Output

    你的组阁方案中最多能占多少个席位.

    Sample Input

    4
    1 3 2 4

    Sample Output

    7
    //选择第二个政党和第四个

    Solution 

    01背包,第二维转移的时候加一点限制就好了。
    多说无益不如看代码

    Code

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #define N (100009)
     5 using namespace std;
     6 
     7 int n,sum,f[N],a[N];
     8 
     9 int main()
    10 {
    11     scanf("%d",&n);
    12     for (int i=1; i<=n; ++i)
    13         scanf("%d",&a[i]),sum+=a[i];
    14     sort(a+1,a+n+1);
    15     f[0]=1;
    16     for (int i=n; i>=1; --i)
    17         for (int j=min(sum,sum/2+a[i]); j>=a[i]; --j)
    18             f[j]|=f[j-a[i]];
    19     for (int i=sum; i>sum/2; --i)
    20         if (f[i]) {printf("%d
    ",i); return 0;}
    21     puts("0");
    22 }
  • 相关阅读:
    如何设置IIS实现无扩展名重写
    正则表达式基础知识
    Literal控件用法
    ajaxPro.dll基础教程
    PetShop的系统架构设计
    SQL点滴29—错误无处不在
    javascript中的正则表达式
    为什么开发环境如此之乱
    SQL点滴文章总结
    javascript读写cookie
  • 原文地址:https://www.cnblogs.com/refun/p/9715453.html
Copyright © 2011-2022 走看看