HDU 4422 The Little Girl who Picks Mushrooms (2012年成都赛区现场赛C题)

1.题目描述:点击打开链接

2.解题思路:本题是一道简单模拟题,然而,自己的方法不对WA了很多次==。最后不得不弃用自己的思路了。首先用-1表示还没有使用过的位置。可以每次枚举3个位置,如果发现这3个位置中没有-1且他们的和不能被1024整除,那么return 0,否则,找到没有被标记的另外2个位置,如果这2个位置其中一个为-1,那么直接返回1024,因为我们已经交了三个袋子了,剩下的袋子中如果又没有确定的,那么一定可以凑成1024。否则,计算这2个位置的和,然后看减去若干次1024后剩下多少,就是返回值。每次用ans更新枚举的最大值即可。

3.代码:

#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<bitset>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;

#define me(s)  memset(s,0,sizeof(s))
#define rep(i,n) for(int i=0;i<(n);i++)
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair <int, int> P;

const int N=6;
int v[6];
int vis[5];

int calc(int x,int y,int z)
{
    int sum=v[x]+v[y]+v[z];
    if((sum%1024)&&v[x]!=-1&&v[y]!=-1&&v[z]!=-1)return 0;
    int a,b;
    me(vis);
    vis[x]=vis[y]=vis[z]=1;
    for(int i=0;i<5;i++)if(!vis[i]){a=i;vis[i]=1;break;}
    for(int i=a;i<5;i++)if(!vis[i]){b=i;vis[i]=1;break;}
    if(v[a]==-1||v[b]==-1)return 1024; //交上去3个袋子后仍然有空的袋子,则一定可以凑成1024
    int res=v[a]+v[b];
    while(res>1024)res-=1024;
    return res;
}

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int ans=0;
        memset(v,-1,sizeof(v));
        for(int i=0;i<n;i++)
            scanf("%d",&v[i]);
        for(int i=0;i<3;i++)
            for(int j=i+1;j<4;j++)
            for(int k=j+1;k<5;k++)
            ans=max(ans,calc(i,j,k));
        printf("%d\n",ans);
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 03:42:57

HDU 4422 The Little Girl who Picks Mushrooms (2012年成都赛区现场赛C题)的相关文章

HDU 4119 Isabella&#39;s Message (2011年成都赛区现场赛I题)

1.题目描述:点击打开链接 2.解题思路:本题是一道模拟题,要求模拟一个解密的过程,练习这么久第一次做模拟题1Y了,内心还是很激动的~.只需要根据题意,记录* 所在的位置即可,然后每次都是先解密,后顺时针旋转90度.把每次解密的信息放到一个vector里,接下来就是连接它们,得到解密后的字符串,在map中查找这些单词是否存在即可.如果都存在,就把这条解密信息放到ans中,最后对ans排序,输出ans[0]就是答案. 3.代码: //#pragma comment(linker, "/STACK:

HDU 4435 charge-station (2012年天津赛区现场赛E题)

1.题目描述:点击打开链接 2.解题思路:本题利用DFS解决.不过本题的解法颇为巧妙,注意到2^0+2^1+...+2^(i-1)<2^i,这就意味着即使在0~i-1都建立加油站,费用也会小于单独在i处建立加油站.这就提示我们,可以一开始全部都建立加油站,然后从大到小依次尝试着删除加油站,如果可以删除,就删除,如果不可以,再添加上.那么该如何判断删除第i处之后是否可行呢?可以利用dfs判断,如果当前访问结点u是建立过加油站的,如果它的邻接点v也是建立了加油站的,且dist(u,v)<=d,那么

HDU 4458 Shoot the Airplane (2012年杭州赛区现场赛F题)

1.题目描述:点击打开链接 2.解题思路:本题利用运动的相对性解决.可以假设飞机固定不动,那么子弹相当于还有一个水平分量,只不过方向是-v.这样,问题就转化为一个动点什么时候到达一个多边形内部的问题了.不过本题有一个细节就是g可能等于0,因此要分匀变速运动和匀速运动2种情况求出最大可能的子弹飞行时间.另外一个细节就是本题对精度要求比较高,建议判断点是否在线段上改为利用坐标的差值来判断,避开使用Dot函数. 3.代码: #include<iostream> #include<algorit

HDU 4455 Substrings (2012年杭州赛区现场赛C题)

1.题目描述:点击打开链接 2.解题思路:本题利用dp解决.不过这个dp的思路的确比太容易想到.需要观察规律才能发现.我们可以从贡献值的角度考虑.以题目中给的样例来说明这种方法. 通过观察相邻两个w值,我们会发现一个事实:每个大区间都包含了小区间的解(这里的解即原题中的sum值).但是这还不够,观察图上标记为红色的数字,它们可以看做是上一个w值对应的区间多出来的新数字,如果我们可以算出这些红色数字的贡献值,那么我们就能得到当前w下的解.那么该如何计算呢? 继续观察后会发现,每次w增加1,区间个数

HDU 4462 Scaring the Birds (2012年杭州赛区现场赛J题)

1.题目描述:点击打开链接 2.解题思路:本题是一道简单模拟题.不过重点还是对于题目细节的理解.容易犯2个理解错误:(1)误以为是每个稻草人有不同的scaring range,实际上scaring range是由不同的vacant intersection决定的,跟稻草人毫无关系.(2)误以为所有点都需要被覆盖,实际上题目要求的是只要所有corn被保护就行,插稻草人的地方本来就是空地,有没有被保护无所谓的.由于题目给的范围非常小,完全可以通过枚举集合来确定哪些位置需要稻草人,如果这些稻草人成功的

HDU 4115 Eliminate the Conflict (2011年成都赛区现场赛E题)

1.题目描述:点击打开链接 2.解题思路:本题属于2-SAT问题,第一次做这种题,还是很感兴趣的.2-SAT解决的是给定m条语句,每一条语句形如"xi为真或xj为假",问你是否可能让所有的语句都成立.那么不难发现,本题就属于一种2-SAT问题. 首先,根据题意可知,第i轮有2种出法,要么是x[i],要么是(x[i]+1)%3.我们令xi为真表示出x[i],xi为假表示出(x[i]+1)%3.对于w==1的情况,我们要分2种情况讨论:当x[u]==x[v]时,表示第u轮出x[u],那么第

HDU 4422 The Little Girl who Picks Mushrooms(数学)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4422 Problem Description It's yet another festival season in Gensokyo. Little girl Alice planned to pick mushrooms in five mountains. She brought five bags with her and used different bags to collect mus

HDU 5128 The E-pang Palace(2014广州赛区现场赛B题 计算几何)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5128 解题报告:在一个平面上给出n个点的坐标,用这n个点作为矩形的四个顶点,作两个矩形,要求两个矩形不能相交,也不能有边和点相交,然后两个矩形的面积之和要最大,求最大的面积之和是多少?如果不存在输出imp 因为n <=30,所以可以先把所有的矩形枚举出来,然后再暴力判断两两矩形组合,首先要满足位置关系,然后取面积和最大就是了.要注意的地方就是要小心一个大矩形包含一个小矩形的情况,在这种情况下,是满足

HDU 5074 Hatsune Miku(2014鞍山赛区现场赛E题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 解题报告:给出一个长度为n的序列,例如a1,a2,a3,a4......an,然后这个序列的美丽值就是socre[a1][a2] + socre[a2][a3] + ..... socre[an-1][an],但是这个序列里面并不是所有的数都是确定的,输入包含一些大于0的数和一些-1,-1表示这个数可以任意,但是要在m的范围内,给出socre[i][j],求这个序列最大的美丽值. 一个二维dp