• 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);
    }
    
  • 相关阅读:
    java虚拟机之类加载机制
    java虚拟机之垃圾收集器
    java虚拟机之内存模型
    java基础之NIO
    java基础之字符串
    Integer.valueOf源码分析
    将博客搬至CSDN
    url中向后台传递参数中文乱码
    Layui主窗口和Iframe层参数传递
    百度地图Api 加载海量点
  • 原文地址:https://www.cnblogs.com/suika/p/8678239.html
Copyright © 2020-2023  润新知