MT48. 考试策略
描述
输入描述
第一行输入一个n数表示题目的数量。输出描述
输出一个数,小明的最高得分。示例1
输入:
4 20 20 100 60 50 30 80 55 100 60 110 88 5 3 10 6
输出:
94
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-12-25
#include<stdio.h> int max(int a,int b) { return a>b?a:b; } int main(void) { int n; scanf("%d",&n); int pi[120],ai[120],qi[120],bi[120],dp[120]={0}; for(int i=0;i<n;i++) { scanf("%d%d%d%d",&pi[i],&ai[i],&qi[i],&bi[i]); } for(int i=0;i<n;i++) { for(int j=120;j>=0;j--) { if(pi[i]<=j) { dp[j]=max(dp[j],dp[j-pi[i]]+ai[i]); } if(qi[i]<=j) { dp[j]=max(dp[j],dp[j-qi[i]]+bi[i]); } } } printf("%d\n",dp[120]); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 372KB, 提交时间: 2020-04-20
#include<stdio.h> int max(int m,int n){ int max; if(m>=n){ max=m; }else{ max=n; } return max; } int main() { int n,p[125]={0},a[125]={0},q[125]={0},b[125]={0},dp[125]={0}; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d %d %d %d",&p[i],&a[i],&q[i],&b[i]); } for(int i=0; i<n; i++) { for(int j=120; j>=0; j--) { if(p[i]<=j) { dp[j]=max(dp[j],dp[j-p[i]]+a[i]); } if(q[i] <= j) //考虑这一题只做一半 dp[j] = max(dp[j], dp[j-q[i]] + b[i]); } } printf("%d",dp[120]); return 0; }