zoukankan      html  css  js  c++  java
  • BZOJ_1334_[Baltic2008]Elect_DP+语文题

    BZOJ_1334_[Baltic2008]Elect_DP

    Description

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

    Input

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

    Output

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

    Sample Input

    4
    1 3 2 4

    Sample Output

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

    分析:
    从大到小排序,01背包,状态从[1,sum/2]中转移。保证当去掉当前政党后剩下的都不会超过总数的一半。
     
    代码:
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    #define N 100050
    int a[350],f[N],n,sum,ans;
    bool cmp(int x,int y){return x>y; }
    int main() {
    	scanf("%d",&n);
    	int i,j;
    	for(i=1;i<=n;++i) scanf("%d",&a[i]),sum+=a[i];
    	sort(a+1,a+n+1,cmp);
    	f[0]=1;
    	for(i=1;i<=n;i++) {
    		for(j=sum/2+a[i];j>=a[i];j--) {
    			if(f[j-a[i]]) {
    				f[j]=1;
    				ans=max(ans,j);
    			}
    		}
    	}
    	printf("%d",ans);
    }
    
  • 相关阅读:
    通俗理解时空效应,感受质量、空间与时间的关系_番外篇
    第四十三象 丙午
    第四十二象 乙巳
    第四十一象 甲辰
    第四十象 癸卯
    ServiceComb简介
    Spring-Session实现Session共享
    SpringBoot整合ActiveMQ
    Hbase配置运行
    KafKa配置运行
  • 原文地址:https://www.cnblogs.com/suika/p/8678239.html
Copyright © 2011-2022 走看看