NYOJ325zb的生日

题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=325
来看思路:本题看上去和背包没什么关系 可仔细阅读可以把他转换成一个01背包的问题

01背包需要有一个容量可这个题的容量在哪 这也是本题的亮点所在 我们可以把所有物品

的重量和的一半作为背包的容量 然后用01背包的状态转移方程来算一半重量求出dp[sum / 2]

然后结果用(sum - dp[sum / 2])//剩下的物品的重量 减去 dp[sum / 2] 就是这道题的结果

来看代码:

#include<stdio.h>
#include<string.h>

using namespace std;
#define max(a,b) a > b?a:b
int a[100010];
int dp[100010];    //因为只需要求一半的价值  所有100000就够了
int main()

{
    int n,i,j;
    while(~scanf("%d",&n))
    {
        int sum = 0;
        memset(dp,0,sizeof(dp));
        memset(a,0,sizeof(a));
        for(i = 0;i < n;i++)
        {
            scanf("%d",&a[i]);
            sum += a[i];
        }
        for(i = 0;i < n;i++)
        {
            for(j = sum/2;j >= a[i];j--)
            {
                dp[j] = max(dp[j],dp[j - a[i]] + a[i]);
            }
        }
        printf("%d\n",sum - 2 * dp[sum / 2]);
    }
    return 0;
}
时间: 2024-12-28 09:14:43

NYOJ325zb的生日的相关文章

动态规划(5)——01背包问题(NYOJ325zb的生日)

zb的生日 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄弟买点什么庆祝生日,经过调查,zb发现C小加和never都很喜欢吃西瓜,而且一吃就是一堆的那种,zb立刻下定决心买了一堆西瓜.当他准备把西瓜送给C小加和never的时候,遇到了一个难题,never和C小加不在一块住,只能把西瓜分成两堆给他们,为了对每个人都公平,他想让两堆的重量之差最小.每个西瓜的重量已知,你能帮

NYOJ-20岁生日

20岁生日 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 路过这的20岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达20岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达20岁生日所经过的总天数,让他好来比较一下. 输入 一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD.如我的生日是1988-03-07. 输出 T行,每行一个数,表示此人从出生到20岁生日所经过的

SqlSever基础 datediff 计算人的生日是不准确的,示例

镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ 1 code 1 --查看现在的时间,方便对比 2 select getdate() 3 select datediff(year,'1996-11-01',getdate()) 4 select datediff(year,'1996-11-03',getdate()) 5 --还没过生日呢,怎

生日报警脚本

脚本作业:生日前三天报警脚本 总结; 刚拿到脚本要求,就想到利用date +%J命令来完成,用生日的全年天数与当日的全年天数作对比,判断生日是否过期,比较两者的差值是否等于3天,来进行前三天报警功能,报警语句进行颜色显示.一个简陋的小脚本,结合今天所学知识,秀下成就感.

bzoj1037[ZJOI2008]生日聚会

bzoj1037[ZJOI2008]生日聚会 题意: 一排小孩坐着玩游戏.就座的方案满足如下条件:对于任意连续的一段,男孩与女孩的数目之差不超过k.给出男孩数,女孩数和k,求就座方案数除以12345678的余数. 题解: dp方程见程序,i1i2表示当前选了几男几女,i3i4分别表示当前男比女多几个和女比男多几个. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define

练习:C#---类(身份证号截取生日、验证邮箱、DateTime)

//练习1:截取生日 Console.Write("请输入你的身份证号码:"); string id = Console.ReadLine(); Console.WriteLine("你的生日是:" + id.Substring(6, 4) + "年" + id.Substring(10, 2) + "月" + id.Substring(12, 2) + "日"); Console.ReadLine();

js 联动实现日期选择,一般用作生日

实现目标:年月日三个select 输入框,以及一个hidden的input,通过js获取input的值,如果有值切是日期格式,年月日select为input中的时间.否则为空.年默认区间段为1900年到当今年份 本人使用了bootstrap,class请参照bootstrap的相关说明 下面是html 内容: <div class="col-sm-9"> <label class="checkbox-inline"> <select n

2.生日蜡烛

题目内容: 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛. 现在算起来,他一共吹熄了236根蜡烛. 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. //*****************************************************************************************************

课后作业 04 --DateTime应用,判断多久后生日之类

try { Console.Write("请以年-月-日的形式输入您的生日:"); string strA = Console.ReadLine(); DateTime bir = Convert.ToDateTime(strA); DateTime tod = DateTime.Today; strA = bir.ToString("MM-dd");//将输入生日转换为月 日格式 string strB = tod.ToString("MM-dd&quo