40pts,警示后人
查看原帖
40pts,警示后人
718060
蒋辰逸楼主2024/10/15 20:04

dp 数组开小了。

40 pts 代码:

//expected:100pts
#include<bits/stdc++.h>
using namespace std;
int s,n,m;
int a[110][110];
int dp[10010];
int ans;
struct node{
	int id,num,cst;
	double dc;
	void ctdc(){
		dc=1.0*cst/(num*id);
	}
	friend bool operator <(node a,node b){
		return a.dc<b.dc;
	}
}t[10010];
int cnt;
int main(){
	cin>>s>>n>>m;
	for(int i=1;i<=s;i++){
		for(int j=1;j<=n;j++){
			cin>>a[j][i];
		}
	}
	for(int i=1;i<=n;i++){
		sort(a[i]+1,a[i]+s+1);
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=1;j--){
			for(int k=1;k<=s;k++){
				if(j>a[i][k]*2){
					dp[j]=max(dp[j],dp[j-a[i][k]*2-1]+k*i);
				}
			}
		}
	}
	for(int i=1;i<=m;i++){
		ans=max(ans,dp[i]);
	}
	cout<<ans<<endl;
	return 0;
}

改成 20010 就过了:

//expected:100pts
#include<bits/stdc++.h>
using namespace std;
int s,n,m;
int a[110][110];
int dp[20010];
int ans;
struct node{
	int id,num,cst;
	double dc;
	void ctdc(){
		dc=1.0*cst/(num*id);
	}
	friend bool operator <(node a,node b){
		return a.dc<b.dc;
	}
}t[10010];
int cnt;
int main(){
	cin>>s>>n>>m;
	for(int i=1;i<=s;i++){
		for(int j=1;j<=n;j++){
			cin>>a[j][i];
		}
	}
	for(int i=1;i<=n;i++){
		sort(a[i]+1,a[i]+s+1);
	}
	for(int i=1;i<=n;i++){
		for(int j=m;j>=1;j--){
			for(int k=1;k<=s;k++){
				if(j>a[i][k]*2){
					dp[j]=max(dp[j],dp[j-a[i][k]*2-1]+k*i);
				}
			}
		}
	}
	for(int i=1;i<=m;i++){
		ans=max(ans,dp[i]);
	}
	cout<<ans<<endl;
	return 0;
}
2024/10/15 20:04
加载中...