洛谷其中几题代码

//P1031
#include<iostream>
using namespace std;
const int N=1e2+10;
int a[N];
int main(){
	int n;
	cin>>n;
	int num=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		num+=a[i];
	}
	int ans=0;
	num/=n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<i;j++){
			a[j+1]+=a[j]-num;
			a[j]=num;
		}
		for(int j=i;j<=n;j++){
			a[j+1]+=a[j]-num;
			a[j]=num;
		}
	}
}
//P1048
#include<iostream>
#include<cstring>
using namespace std;
const int N=1010;
int v[N],w[N];
int dp[N][N];
int main(){
	int t,m;
	cin>>t>>m;
	for(int i=1;i<=m;i++){
		cin>>w[i]>>v[i];
	}
	for(int i=1;i<=m;i++){
		for(int j=0;j<=t;j++){
			if(j>=w[i])dp[i][j]=max(dp[i-1][j-w[i]]+v[i],dp[i-1][j]);
			else dp[i][j]=dp[i-1][j];
		}
	}
	cout<<dp[m][t];
}
//P1049
#include<iostream>
using namespace std;
const int N=2e4+10;
int v[40];
int dp[40][N];
int main(){
	int V,n;
	cin>>V>>n;
	for(int i=1;i<=n;i++){
		cin>>v[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=V;j++){
			if(j>=v[i])dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+v[i]);
			else dp[i][j]=dp[i-1][j];
		}
	}
	cout<<V-dp[n][V];
}
//P1060
#include<iostream>
using namespace std;
const int N=30;
int v[N],p[N];
int dp[N][31000];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>v[i]>>p[i];
	}
	for(int i=1;i<=m;i++){
		for(int j=0;j<=n;j++){
			if(v[i]<=j)dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+p[i]*v[i]);
			else dp[i][j]=dp[i-1][j];
		}
	}
	cout<<dp[m][n];
}
//P1164
#include<iostream>
using namespace std;
const int N=110;
int dp[N][11000];
int a[N];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<=m;j++){
			if(j==a[i])dp[i][j]=max(dp[i-1][j],dp[i-1][j]+1);
			else if(j>a[i])dp[i][j]=dp[i-1][j]+dp[i-1][j-a[i]];
			else dp[i][j]=dp[i-1][j];
		}
	}
	cout<<dp[n][m];
}
//P1223
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e3+10;
struct node{
	int id,t;
	bool operator < (node& p){
		return t<p.t;
	}
};
struct node a[N];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].t;
		a[i].id=i;
	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++){
		cout<<a[i].id<<" ";
	}
	cout<<endl;
	double ans=0;
	int cnt=0;
	for(int i=1;i<=n;i++){
		ans+=cnt;
		cnt+=a[i].t;
	}
	printf("%.2lf",ans/n);
}
//P1616
#include<iostream>
using namespace std;
const int N=1e4+10;
class P1616 {
	public:
		int ti[N],v[N];
		int dp[N][N];
		int main() {
			int t,m;
			cin>>t>>m;
			for(int i=1; i<=m; i++) {
				cin>>ti[i]>>v[i];
			}
			for(int i=1; i<=m; i++) {
				for(int j=0; j<ti[i]; j++) {
					dp[i][j]=dp[i-1][j];
				}
				for(int j=ti[i]; j<=t; j++) {
					dp[i][j]=max(dp[i][j],dp[i][j-ti[i]]+v[i]);
				}
			}
			cout<<dp[m][t]<<endl;
		}
};
int main() {
	P1616 aa;
	aa.main();
}
//P1734
#include<iostream>
#include<cmath>
using namespace std;
const int N=1e3+10;
int s;
int dp[N];
int cnt[N];
//dp[i]表示如果和不超过i,最大值
int main(){
	for(int i=1;i<=N-10;i++){
		for(int j=1;j<=sqrt(i);j++){
			if(i%j==0)cnt[i]+=j+i/j;
			if(j==i/j){
				cnt[i]-=j;
			}
		}
		cnt[i]-=i;
	}
	cin>>s;
	for(int i=1;i<=s;i++){
		for(int j=s;j>=i;j--){
			dp[j]=max(dp[j],dp[j-i]+cnt[i]);
		}
	}
	cout<<dp[s];
}
//P1802
#include<iostream>
#define int long long 
using namespace std;
const int N=1e3+10;
int lose[N],win[N],use[N];
int dp[N][N];
signed main(){
	int n,x;
	cin>>n>>x;
	for(int i=1;i<=n;i++){
		cin>>lose[i]>>win[i]>>use[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<=x;j++){
			if(j>=use[i])dp[i][j]=max(dp[i-1][j],dp[i-1][j-use[i]]+win[i]);
			dp[i][j]=max(dp[i-1][j],max(dp[i][j],dp[i-1][j]+lose[i]));
		}
	}
	cout<<dp[n][x]*5;
}
//P1926
#include<iostream>
#include<algorithm>
using namespace std;
const int N=200;
int dp[N];
int t[N],et[N],v[N];
int main(){
	int n,m,k,r;
	cin>>n>>m>>k>>r; 
	for(int i=1;i<=n;i++)cin>>t[i];
	for(int i=1;i<=m;i++)cin>>et[i];
	for(int i=1;i<=m;i++)cin>>v[i];
	sort(t+1,t+1+n);
	for(int i=1;i<=n;i++){
		for(int j=0;j<=r;j++){
			if(j>=et[i]){
				dp[j]=max(dp[j],dp[j-et[i]]+v[i]);
			}
		}
	}
	int res=0;
	for(int i=1;i<=r;i++){
		if(dp[i]>=k){
			res=r-i;
			break;
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		if(res<t[i])break;
		res-=t[i];
		ans++;
	}
	cout<<ans;
}
//P2370
#include<iostream>
#include<cstring>
using namespace std;
const int N=1e3+10;
int w[N],v[N];
int dp[N][N];
int n,p,s; 
int f(int num){
	memset(dp,0,sizeof dp);
	for(int i=1;i<=n;i++){
		bool flag=false;
		if(w[i]>num)flag=true;
		for(int j=0;j<=s;j++){
			dp[i][j]=dp[i-1][j];
			if(j>=w[i]&&!flag)dp[i][j]=max(dp[i][j],dp[i-1][j-w[i]]+v[i]);
		}
	}
	return dp[n][s];
}
int main(){
	cin>>n>>p>>s;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i];
	} 
	//参数:价值,接口大小,位置,总大小
	//分类讨论\
	1.传入文件
	int l=0,r=N;
	while(l<r){
		long mid=(r+l)/2;
		int res=f(mid);
		if(res>=p){
			r=mid;
		}
		else l=mid+1;
	}
	if(f(l)<p){
		printf("No Solution!\n");
	}
	else{
		printf("%d\n",l);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值