【小米oj】 海盗分赃

背包

#define mm(a) memset(a,0,sizeof(a));
#define max(x,y) (x)>(y)?(x):(y)
#define min(x,y) (x)<(y)?(x):(y)
#define Fopen freopen("1.in","r",stdin); freopen("m.out","w",stdout);
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,b,a) for(int i=(b);i>=(a);i--)
#include<bits/stdc++.h>
typedef long long ll;
#define PII pair<ll,ll>
using namespace std;
const int INF=0x3f3f3f3f;
const int MAXN=(int)2e5 + 5;
const ll mod=1e9+7;

string input,temp;
vector<int>v;
int n,dp[MAXN];
int main() {
    while (cin >> input) {
//    cin>>input;
        istringstream iss(input);
        v.clear();
        v.push_back(0);
        mm(dp);
        int all=0;
        while (getline(iss, temp, ‘,‘)) {
            int x=atoi(temp.c_str());
            v.push_back(x);
            all+=x;
        }
        if(all&1) {
            printf("false\n");
            return 0;
        }
        n=v.size()-1;
        dp[0]=1;
        for(int i=1; i<=n; i++) {
            for(int j=all/2; j>=v[i]; j--) {
                dp[j]=max(dp[j],dp[j-v[i]]);
            }
        }
        if(dp[all/2])printf("true\n");
        else printf("false\n");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/dogenya/p/10815601.html

时间: 2024-10-12 12:46:23

【小米oj】 海盗分赃的相关文章

(算法)海盗分赃_2

分享一篇趣文(来自伯乐在线:http://blog.jobbole.com/70395/),同样是海盗分赃问题,这篇文章以诙谐幽默的口吻以及浅显易懂的对话来解释海盗分赃问题. 与上一篇博文海盗分赃_1不同的是,这里的投票规则为半数即可,并不要求大于半数.因此该问题的思路过程结果为: (300,0) (299,0,1) (299,0,1,0) (298,0,1,0,1) (298,0,1,0,1,0) 文章如下: #算法题# 6个海盗要分赃300金币.规则是由资格最老的海盗提出各人分到的数量,然后

【博弈】海盗分赃

题目大意:有N(N<=1000)个贪婪的海盗,他们得到了100,000个金币,决定分赃.他们都很精明,都想自己利益最大化,并采取如下策略: 1. 首先N人排好次序. 2. 由编号最大者给出分赃方案. 3. 所有人表决,50%及以上的人赞成就分赃成功,否则转4. 4. 杀掉提案者(总人数少了1),转2. 你的任务:判断第几号海盗得最多金币,有多少个. 题解:此题需要绕一个小弯,首先,获得钱最多的一定是第一个人.其次,他只需给所有奇数号的人一枚金币.可以YY一下,奇数永远都受偶数的限制,他们非常可能

2-10. 海盗分赃(25) (ZJUPAT 数学)

题目链接:http://pat.zju.edu.cn/contests/ds/2-10 P个海盗偷了D颗钻石后来到公海分赃,一致同意如下分赃策略: 首先,P个海盗通过抽签决定1-P的序号.然后由第1号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括1号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则1号将被投入大海喂鲨鱼:而后依次类似地由第2号.第3号等等海盗提出方案,直到能够获得绝对多数同意的方案出现为止,或者只剩下最后一位海盗,其独占所有钻石.请编写一个

(算法)海盗分赃_1

题目: P个海盗偷了D颗钻石后来到公海分赃,一致同意如下分赃策略: 首先,P个海盗通过抽签决定1-P的序号.然后由第1号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括1号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则1号将被投入大海喂鲨鱼:而后依次类似地由第2号.第3号等等海盗提出方案,直到能够获得绝对多数同意的方案出现为止,或者只剩下最后一位海盗,其独占所有钻石.请编写一个程序,给出第1号海盗的钻石分配方案中自己分得的钻石数量. 附带的三个假定: 1)

进阶实验2-3.1 海盗分赃 (25分)

P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略: 首先,P 个海盗通过抽签决定 1 - P 的序号.然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括 1 号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则 1 号将被投入大海喂鲨鱼:而后依次类似地由第 2 号.第 3 号等等海盗提出方案,直到能够获得绝对多数同意的方案出现为止,或者只剩下最后一位海盗,其独占所有钻石.请编写一个程序,给出第 1 号海盗的钻石分配方案中自己分得的钻

bnu24252 海盗分赃

题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=24252 这是四川2012年省赛的一道题,背景:海盗分宝藏.大概题意:给你N种价值的物品,物品有两个属性,一个是数量,一个是价值(价值是以2的ai次方表示的).为了公平起见,求出宝藏分配的最小差(二进制表示). 思路:当我们把宝藏合成后,即2*2^(n-1)宝藏=1*2^n宝藏(即二进制的进位处理),如果价值最大的宝藏可一分为二,那么该宝藏不会影响最终的结果(即该部分差值为0),如果价值最大的宝

小米 OJ 编程比赛 12 月常规赛

小米兔跳格子 序号:#119难度:一般时间限制:1000ms内存限制:30M 描述 米兔爸爸为了让小米兔好好锻炼身体,便给小米兔设置了一个挑战——跳格子. 要吃到自己心爱的胡萝卜,小米兔需要跳过面前一些格子.现有 NN 个格子,每个格子内都写上了一个非负数,表示当前最多可以往前跳多少格,胡萝卜就放在最后一个格子上.米兔开始站在第 1 个格子,试判断米兔能不能跳到最后一个格子吃到胡萝卜呢? 输入 输入为 NN 个数字 (N \lt 10N<10),用空格隔开,第 ii 个数字 s_isi? (0

小米OJ 2. 找出单独出现的数字

解法一: map 1.45 ms #include <algorithm> #include <bitset> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <list> #include <map> #include <queue>

[小米OJ] 4. 最长连续数列

思路: 时间限制为O(n),即不能使用先排序后寻找的方法. 这里利用哈希表查询插入复杂度都为O(1)的特性来解,利用一个哈希表来保存每一个数字以及其所在数列的长度. 遍历每一个数字n:查询表中是否存在n-1和n+1,若存在,则hash[n]的值为1 + hash[n-1] + hash[n+1],若不存在即是 1. 同时,为了预防相同数字多次判断,每一次遍历时判断该数字在表中的value是否为0,若不为0说明已经判断过了,跳过即可. #include <bits/stdc++.h> using