70分,第二个点输出520。。。
查看原帖
70分,第二个点输出520。。。
299725
zengrui楼主2022/7/5 14:33
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define mn 3500
using namespace std;
int n,m,w[mn],v[mn],c;
int f[2][10005];
int t;
int main() {
	cin>>m>>n>>c;
	for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
	for(int i=1;i<=n;i++) {
		t=(t+1)%2;
		for(int j=1;j<=c;j++) {
			if(t) {
				if(j-w[i]>=0) f[1][j]=max(f[0][j],f[0][j-w[i]]+v[i]);
				else f[1][j]=f[0][j];
			}
			else {
				if(j-w[i]>=0) f[0][j]=max(f[1][j],f[1][j-w[i]]+v[i]);
				else f[0][j]=f[1][j];
			}
		}
	}
	for(int i=1;i<=c;i++)
		if(f[t][i]>=m) {
			cout<<c-i<<endl;
			return 0;
		}
	cout<<"Impossible"<<endl;
	return 0;
}
2022/7/5 14:33
加载中...