纪念品分组 w = int(input()) n = int(input()) p = [in

纪念品分组
w = int(input()) 
n = int(input()) 
p = [int(input()) for _ in range(n)] 
p.sort()
l, r, res = 0, n-1, 0 
while l <= r: 
    if p[l] + p[r] <= w: 
        l += 1 
    r -= 1 
    res += 1 
print(res)
采药
T, M = map(int, input().split()) 
dp = [0]*(T+1)   
for _ in range(M): 
    t, v = map(int, input().split()) 
    for j in range(T, t-1, -1): 
        dp[j] = max(dp[j], dp[j-t]+v) 
print(dp[T])
合并果子
import heapq 
n = int(input()) 
a = list(map(int, input().split())) 
heapq.heapify(a)   
res = 0 
while len(a) > 1: 
    x = heapq.heappop(a)   
    y = heapq.heappop(a)   
    res += x + y           
    heapq.heappush(a, x + y)   
print(res)
开心的金明
n, m = map(int, input().split()) 
dp = [0]*(n+1)   
for _ in range(m): 
    v, p = map(int, input().split()) 
    val = v * p   
    for j in range(n, v-1, -1): 
        dp[j] = max(dp[j], dp[j-v] + val) 
print(dp[n])
能量项链
n=int(input())
a=list(map(int,input().split()))[:n]*2
dp=[[0]*(2*n) for _ in range(2*n)] 
for l in range(2,n+1):   
    for i in range(2*n-l): 
        j=i+l 
        for k in range(i+1,j): 
            dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]) 
print(max(dp[i][i+n] for i in range(n))) 
装箱
V=int(input())
n=int(input())
dp=[0 for i in range(V+1)] 
for i in range(n): 
    v=int(input()) 
    for j in range(V,v-1,-1): 
        dp[j]=max(dp[j],dp[j-v]+v) 
print(V-dp[V])
一元三次方程求解
a,b,c,d=map(float,input().split())
x=-100.0
while x <=100.0: 
    val=a*x**3+b*x**2+c*x+d 
    if abs(val)<=1e-5: 
        print(f"{x:.2f}",end=" ") 
        x+=0.5 
    x+=0.001 
选数
from itertools import combinations 
n,k=map(int,input().split())
x=list(map(int,input().split()))
r=0
for comb in combinations(x,k): 
    s=sum(comb) 
    if s>1 and all(s%i for i in range(2,int(s**0.5)+1)): 
        r+=1 
print(r)
2的n次方
a=int(input())
print(2**a)
混合牛奶
n, m = map(int, input().split()) 
v = sorted(tuple(map(int, input().split())) for _ in range(m)) 
s = 0 
for p, a in v: 
    t = min(n, a) 
    s += t * p 
    n -= t 
print(s)
数列分段n,m=map(int,input().split())
a=list(map(int,input().split()))
group=1
sum=0
for i in a: 
    sum+=i 
    if sum>m: 
        group+=1 
        sum=i 
print(group)
石子合并
n=int(input())
a=list(map(int,input().split()))
a*=2
s=[0]*(n*2+1)
for i in range(n*2):s[i+1]=s[i]+a[i] 
mn=[[0]*(n*2) for _ in range(n*2)] 
mx=[[0]*(n*2) for _ in range(n*2)] 
for l in range(1,n): 
    for i in range(n*2-l): 
        j=i+l;t=s[j+1]-s[i] 
        mn[i][j]=min(mn[i][k]+mn[k+1][j]+t for k in range(i,j)) 
        mx[i][j]=max(mx[i][k]+mx[k+1][j]+t for k in range(i,j)) 
print(min(mn[i][i+n-1] for i in range(n))) 
print(max(mx[i][i+n-1] for i in range(n))) 
田忌赛马
import sys 
d=list(map(int,sys.stdin.read().split()))
n,*r=d
t=sorted(r[:n],reverse=1)
q=sorted(r[n:],reverse=1)
i=j=x=y=s=0
y=n-1
while i<=x: 
    if t[i]>q[j]:s+=200;i+=1;j+=1 
    elif t[x]>q[y]:s+=200;x-=1;y-=1 
    else:s-=200*(t[x]<q[j]);x-=1;j+=1 
print(s)
最长公共子序列
#include<bits/stdc++.h>
using namespace std; 
const int M=5e3+5,mod=1e8; 
int m,n,f[M][M],c[M][M]; 
string a,b; 
int main(){ 
    cin>>a>>b; 
    m=a.size()-1,n=b.size()-1; 
    a=' '+a,b=' '+b; 
    for(int i=0;i<=m;i++)c[i][0]=1; 
    for(int i=0;i<=n;i++)c[0][i]=1; 
    for(int i=1;i<=m;i++){ 
        for(int j=1;j<=n;j++){ 
            if(a[i]==b[j]) 
                f[i][j]=f[i-1][j-1]+1,c[i][j]=c[i-1][j-1]; 
            else f[i][j]=max(f[i-1][j],f[i][j-1]); 

            if(f[i][j]==f[i-1][j])c[i][j]+=c[i-1][j]; 
            if(f[i][j]==f[i][j-1])c[i][j]+=c[i][j-1]; 
            if(f[i][j]==f[i-1][j-1])c[i][j]-=c[i-1][j-1]; 
            c[i][j]%=mod; 
        } 
    } 
    cout<<f[m][n]<<'\n'<<c[m][n]; 
    return 0; 
}
斐波那契数列
n=int(input())
f=[1,1]
for i in range(2,30):f.append(f[i-1]+f[i-2]) 
for _ in range(n):print(f[int(input())-1]) 
全排列问题
import itertools as it 
n=int(input())
for p in it.permutations(range(1,n+1)):print(''.join(f'{x:5d}'for x in p))
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务