3 条题解
-
1
还有谁能比我短?
#include<iostream> int i,j,l,n,m,k,a[1005],b[1005],dp[1005][1005];int main(){std::cin>>n>>m>>k;for(i=1;i<=k;i++)std::cin>>a[i]>>b[i];for(i=1;i<=k;i++)for(j=n;j>=a[i];j--)for(l=m;l>=b[i];l--)dp[j][l]=std::max(dp[j][l],dp[j-a[i]][l-b[i]]+1);for(i=0;i<=m;i++)if(dp[n][i]==dp[n][m]){std::cout<<dp[n][m]<<" "<<m-i;return 0;}}
-
0
60分代码 #include<bits/stdc++.h> #include<cstring> #include<queue> #include<set> #include<stack> #include<vector> #define ll long long using namespace std; const int N=1e5+10; const int M=2023; const int inf=0x3f3f3f3f; ll n,m,k,ans=-inf,pkqstrong=-inf; ll a[N],b[N],vis[1005][505]; void dfs(ll ball,ll strong,ll num,ll step)//剩余球数 剩余力量 捕捉的个数 第几个 { // cout<<ball<<" "<<strong<<" "<<num<<" "<<"step:"<<step<<" "<<a[step]<<" "<<b[step]<<"\n"; if(vis[ball][strong]>num)return; vis[ball][strong]=num; if(step==k+1 or ball==0 or strong<=0) { if(num>ans) { ans=num; pkqstrong=strong; } if(num==ans) { pkqstrong=max(pkqstrong,strong); } return; } if(strong-b[step]>0 and ball-a[step]>=0) { dfs(ball-a[step],strong-b[step],num+1,step+1); } dfs(ball,strong,num,step+1); } int main() { memset(vis,-1,sizeof vis); scanf("%lld%lld%lld",&n,&m,&k); for(int i=1;i<=k;i++) { scanf("%lld%lld",&a[i],&b[i]); } dfs(n,m,0,1); printf("%lld %lld",ans,pkqstrong); return 0; } /* */
//满分代码 #include<bits/stdc++.h> #include<cstring> #include<queue> #include<set> #include<stack> #include<vector> #define ll long long using namespace std; const int N=1e5+10; const int M=2023; const int inf=0x3f3f3f3f; int n,m,k,ans,dp[1005][505],a[N],b[N]; int main() { scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=k;i++)scanf("%d%d",&a[i],&b[i]); for(int i=1;i<=k;i++) { for(int j=n;j>=a[i];j--) { for(int kk=m;kk>=b[i];kk--) { dp[j][kk]=max(dp[j][kk],dp[j-a[i]][kk-b[i]]+1); } } } cout<<dp[n][m]<<" "; for(int i=0;i<=m;i++) { if(dp[n][i]==dp[n][m]) { cout<<m-i; return 0; } } return 0; } /* 389 207 155 300 299 170 158 65 */
-
-1
满分代码
#include<bits/stdc++.h> #include<cstring> #include<queue> #include<set> #include<stack> #include<vector> #define ll long long using namespace std; const int N=1e5+10; const int M=2023; const int inf=0x3f3f3f3f; int n,m,k,ans,dp[1005][505],a[N],b[N]; int main() { scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=k;i++)scanf("%d%d",&a[i],&b[i]); for(int i=1;i<=k;i++) { for(int j=n;j>=a[i];j--) { for(int kk=m;kk>=b[i];kk--) { dp[j][kk]=max(dp[j][kk],dp[j-a[i]][kk-b[i]]+1); } } } cout<<dp[n][m]<<" "; for(int i=0;i<=m;i++) { if(dp[n][i]==dp[n][m]) { cout<<m-i; return 0; } } return 0; }
- 1
信息
- ID
- 3021
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 134
- 已通过
- 48
- 上传者