全部评论
第一个80,第二个直接用背包问题解决了
s=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
a=sorted(a,reverse=True)
b=sorted(b,reverse=True)
total=0
for i in a:
if i<b[-1]:
total-=100
else:
for j in b:
if i>j:
total+=100
break
b.remove(j)
print(total)
元宝
importjava.util.Scanner;
public class Main {public static void main(String[] args) {
Scanner sc = newScanner(System.in); int n = sc.nextInt(); int[] socer = new int[n]; int[] time = new int[n]; for(inti =0; i < n;i++){ int x = sc.nextInt(); socer[i] = x; } for(inti =0; i < n;i++){ int x = sc.nextInt(); time[i] = x; } intallTime = sc.nextInt(); System.out.println(maxSoc(n,socer,time,allTime)); } public static int maxSoc(intn,int[] socer,int[] time,intallTime){//01背包 int[] dp = new int[allTime + 1]; for(inti =0;i < n;i++){ for(intj = allTime;j >=0;j--){ if((j - time[i] >= 0) && (dp[j] <= dp[j - time[i]] + socer[i])){//状态方程 dp[j] = dp[j - time[i]] + socer[i]; }
}
} returndp[allTime]; }
}
数学竞赛题
数学竞赛0-1背包问题
result=-1000
def dfs(a,b,n,d,t):
global result
if d>=n:
if t>result:
result=t
return
for i in range(d,n):
temp=a[d]
a[d]=a[i]
a[i]=temp
tl=0
if a[d]>b[d]:
tl=100
elif a[d]<b[d]:
tl=-100
dfs(a,b,n,d+1,t+tl)
s=int(input())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
n=len(a)
dfs(a,b,n,0,0)
print(result)
相关推荐
喜欢了三年的学长,今年要毕业了,下午体育课的时候鼓起勇气给他包里偷偷塞了写好的情书,下课的时候发现情书还在包里,身份证复印件却不见了,我该怎么办,已经过去一下午了,不敢给学长发消息。。。。。。。。。。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
03-03 15:42
天津师范大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享