自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

(๑•̀ㅂ•́)و✧

  • 博客(10)
  • 收藏
  • 关注

原创 HDU 2546 饭卡

分析:要求余额最少,如果余额一开始就少于5元,直接输出。否则最后刷的那次肯定是要刷最贵的,所以只要求出除去最贵的价格,在m-5的钱中最多花多少。于是就转化为01背包问题,状态转移方程为:dp[j]=max{dp[j],dp[j-val[i]]+val[i]}.# include # include int main() { int i,j,n,m,t,k,val[1005],dp

2015-05-27 23:25:42 511

原创 HDU 2602 Bone Collector

分析:简单的01背包问题,状态转移方程为:dp[i][v]=max{dp[i-1][v],dp[i-1][v-w[i]]+val[i]},其中dp[i][v]表示前i件物品放在容量为v中的最大值。转化为一维数组的状态转移方程为:dp[v]=max{dp[v],dp[v-w[i]]+val[i]},其中循环为v=V...w[i],保证推f[v]时f[v-w[i]]保存的是状态f[i-1][v-w[i

2015-05-27 20:10:35 479

原创 CF Ice Cave

分析:题意就和迷宫问题差不多,'X'的只能走一次,第二次就掉下去了,而我们要掉到终点,所以如果我们走到终点处是 '.' 就要再走一次才能掉下去,用BFS走一下就可以了。# include int sx,sy,ex,ey,n,m,f; char map[505][505]; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1}; struct

2015-05-24 21:44:00 531

原创 CF School Marks

分析:题意是:输入考试科目数 n ,已经考的科目数 k ,科目最高能考的分数 p ,总分不能超过的数 x ,中位数不能小于 y。再输入 k 个数代表已考的分数,让你任意输出剩的 n-k 门考试的分数,满足 n 门课的总分不超过 x ,中位数不低于 y .于是我们先计算已考的n门的分数加上剩下n-k门的最低分1的总和,如果超过x 就标记f=0。否则再找出大于等于y的那个最小的数放在中间,如果没有就加

2015-05-24 19:35:06 765

原创 CF Combination Lock

分析:只要求出两个数之间最短的距离相加就可以了。# include int main() { int i,n,x,y,sum=0; char a[1010],b[1010]; scanf("%d%s%s",&n,a,b); for(i=0;i<n;i++) { x=(10+a[i]-b[i])%10; y=(10+b[i]-a[i])%1

2015-05-24 19:17:48 659

原创 CF Om Nom and Candies

分析:输入总重量c,红糖幸福值hr,蓝糖幸福值hb,红糖重wr,蓝糖重wb.输出最大的幸福值。直接暴力就可以了。为了防止时间超限,限制它的循环次数。# include int main() { __int64 c,hr,hb,wr,wb,r,b,i,j,max=0,time=10000000; scanf("%I64d%I64d%I64d%I64d%I64d",&c,&h

2015-05-17 21:12:28 627

原创 CF Om Nom and Dark Park

分析:题意是一颗满二叉树,输入树的高度n,按树的顺序输入两个结点之间的权,问你最少添加多少权,可以使根结点到每个叶子结点之间的权值的和相等。因为是满二叉树,所以可以用数组来储存,结点i的左孩子为2*i,右孩子为2*i+1.。所以从最后一个有孩子的结点往前循环到根结点,计算每棵子树的左孩子和有孩子的差,差值加到权值较小的树上。# include # include int s[5000]

2015-05-17 20:10:44 847

原创 CF King of Thieves

分析:题意是选一个点,然后跳4下都是跳到*上,存在就输出yes,否则输出no。因为n# include int main() { int i,j,n,f; char s[150]; scanf("%d",&n); scanf("%s",s); for(i=0,f=0;i<n;i++) for(j=1;j<n;j++) if(s[i]==

2015-05-17 20:00:43 604

原创 HDU 5214 Movie

分析:因为这题要找出3个区间,所以我们只需找到最左边的区间和最右边的区间,再遍历一下所有的区间,只要有介于这两个区间的就可以。其中最左边的区间肯定是R[i]最小的,最右边的区间肯定是L[i]最大的。需要注意的是:(1)交换左右区间是在所有的区间都生成之后才交换的.(2)定义变量用int 会 Wrong Answer,用long long或__int64 会 Memory Limit Excee

2015-05-14 23:14:59 392

原创 HDU 5223 GCD

HDU 5233 GCD分析:对于q个问题中,在数组ans的每个区间a[i],到b[i]之间的最大公约数是c[i],所以取ans[i]为ans[i]和c[i]的最小公倍数。      之后还要在对q个问题的答案检验一遍。# include __int64 gcd(__int64 a,__int64 b) { return b==0 ? a:gcd(b,a%b);

2015-05-11 21:29:12 412

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除