方格游戏(C++)求解法?

green tool : help-assignment

方格游戏(C++)求解法?

题目描述
小H最近在玩一种很新的网络游戏,规则如下:

给定一个n行32列的方格图,每一个格子里都写有一个数字0/1,每行的积分为将该行从左至右所连成的二进制数。

一次左移变换是指把某一行所有的数都左移一格,同时将那一行的第1个数移到该行的最后一格。

在不超过m次左移变换后,n行的积分和S最大能是多少。

通关密码为十进制下的 S,请你设计一个程序帮助小H通关。

输入格式
第一行包含两个正整数n和m,用一个空格分隔。

接下来n行,每行包含一个正整数
,表示初始积分在十进制下的数。

输出格式
一个正整数表示通关密码。

样例 #1
样例输入 #1
3 9

2365587456 2399141888 9437184

样例输出 #1
7535067152

样例说明
初始方格图为:
10001101000000000000000000000000
10001111000000000000000000000000
00000000100100000000000000000000

最优操作为:对第一行使用 4次左移变换,对第二行使用4次左移变换,对第三行使用1次左移变换。

操作后的方格图为:
11010000000000000000000000001000
11110000000000000000000000001000
00000001001000000000000000000000

其各行的积分值为:348966093、4026531848、18874368,答案为各行积分值之和,即7535067152。

数据规模与约定
对于30%的数据, 1<=n, m<=12

对于 60%的数据, 1<=n, m<=100

另有 10%的数据, 1<=n<=1000, m = 1

对于 100%的数据,1<=n, m<=1000,0<=Ai<=2^32-1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值