AcWing第 89 场周赛
AcWing 4803. 满足的数
n = int(input())
a = list( map( int , input().split(' ') ) )
s = 0
for i in a :
s += i
res = 0
for x in range( 1 , 5+1 ) :
if ( s + x ) % (n+1) != 1 :
res += 1
print(res)
AcWing 4804. 构造矩阵
首先初始化二维矩阵且值全为1,将b[x][y]==0
对应的位置都全部赋值为0
,检验b[x][y]==1
是否合法
n , m = map( int , input().split(' ') )
b = [ list( map( int , input().split(' ' ) ) ) for i in range(n) ]
a = [ [1 for i in range(m)] for i in range(n) ]
for x in range(n):
for y in range(m):
if b[x][y] == 0 :
for i in range(n):
a[i][y] = 0
for i in range(m):
a[x][i] = 0
for x in range(n):
for y in range(m):
if b[x][y] == 1:
cnt = 0
for i in range(n):
cnt += a[i][y]
for i in range(m):
cnt += a[x][i]
if cnt == 0:
print("NO")
exit()
print("YES")
for x in range(n):
for y in range(m):
print( a[x][y] , end=" \n"[ 1 if y == m-1 else 0 ] )
AcWing 4805. 加减乘
dp题目。其实加一和乘二都好处理,难点在于减一。
如果i
通过(i+1)-1
得到,哪么一定有(i+1)
通过(i+1)/2
得到。因为如果\((i+1)\)通过i+1
得到,那么f[i+1] = f[i] + x , f[i] = f[i+1] + x = f[i]+2*x
一定会冲突。
那么(i+1)
会不会通过(i+2)-1
获得呢?
如果是这样的话,f[i] = f[i+1]+x= f[i+2]+2*x = f[(i+2)/2]+2*x+y
,但是会有f[i]=f[x/2]+y=f[x/2+1]+x+y
这样的更优解出现
这样的话就只在i
为奇数的是否考虑从(i+1)/2
转移过来。这样就去掉了后效性
n, x, y = map(int, input().split(' '))
f = [10 ** 18 for i in range(n + 1)]
f[0] = 0
for i in range( 1 , n + 1):
if i % 2 == 0:
f[i] = min(f[i // 2] + y, f[i - 1] + x)
else:
f[i] = min(f[i - 1] + x, f[(i + 1) // 2] + x + y)
print(f[n])