NC238810. 数学考试
描述
输入描述
输入共 行。
输入的第一行为两个正整数 ,。
接下来 行,每行四个正整数,第 行分别为 。
输出描述
输出共一行,为牛妹可以积累经验的最大值。
示例1
输入:
4 10 1 100 1 1 2 100 1 1 3 100 1 1 4 100 1 1
输出:
100
C++(g++ 7.5.0) 解法, 执行用时: 173ms, 内存消耗: 664K, 提交时间: 2022-10-05 19:32:56
#include<stdio.h> #include<algorithm> using namespace std; typedef long long ll; ll dp[100020][2]; ll a,b,q,w; ll n,k; ll ans=0; int main() { scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++) { scanf("%lld%lld%lld%lld",&a,&b,&q,&w); int j; for(j=0;j<=k;j++) { dp[j][0]=dp[j][1]; if(j<=b) dp[j][0]+=a*j; } for(j=0;j<=k;j++) { dp[j][1]=dp[j][0]; if(j-q>=0) dp[j][1]=max(dp[j][1],dp[j-q][0]); if(j+w<=k) dp[j][1]=max(dp[j][1],dp[j+w][0]); } } ll maxx=0; for(int i=0;i<=k;i++) maxx=max(maxx,dp[i][0]); printf("%lld\n",maxx); return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 152ms, 内存消耗: 528K, 提交时间: 2022-10-03 08:08:40
#include<bits/stdc++.h> #define int long long using namespace std; const int N=1e4+5; int a,b,q,w,dp[N][2]; signed main() { int n,k; scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++) { scanf("%lld%lld%lld%lld",&a,&b,&q,&w); for(int j=0;j<=k;j++) { dp[j][0]=dp[j][1]; if(j<=b) dp[j][0]+=a*j; } for(int j=0;j<=k;j++) { dp[j][1]=dp[j][0]; if(j-q>=0) dp[j][1]=max(dp[j][1],dp[j-q][0]); if(j+w<=k) dp[j][1]=max(dp[j][1],dp[j+w][0]); } } int maxn=0; for(int j=0;j<=k;j++) maxn=max(maxn,dp[j][0]); printf("%lld",maxn); return 0; }