问题标题: 酷町堂:6732

0
0
已解决
李锦昊
李锦昊
中级天翼
中级天翼

弱**代码:

#include<bits/stdc++.h>
using namespace std;
int r,zh;
int n,sum;
struct p{
	int t,z,zf;
}a[55];
bool cmp(p x,p y){
	return x.t*y.z<y.t*x.z;
}
int main(){
	cin>>r>>zh;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].t>>a[i].z>>a[i].zf;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		if(a[i].t<=r&&a[i].z<=zh){
			sum+=a[i].zf;
			r-=a[i].t;
			zh-=a[i].z;
		}
		cout<<a[i].t<<" "<<a[i].z<<" "<<a[i].zf<<endl;
	}
	cout<<sum;
	return 0;
}

样例过了,找错,我认为我排序错了

李锦昊在2021-10-02 19:59:28追加了内容

24行是调试代码

李锦昊在2021-10-02 19:59:56追加了内容

**=**=ji


0
已采纳
被禁言 张皓轩
张皓轩
中级光能
中级光能
01背包:
int dp[400][400];
int a[55],b[55],c[55];
int t,w;
void Dp(int n){
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=n;i++)
        for(int j=t;j>=0;j--)
            for(int k=w;k>=0;k--)
        if(j>=a[i]&&k>=b[i])dp[j][k]=max(dp[j][k],dp[j-a[i]][k-b[i]]+c[i]);
}
int main(){
    int n;
    scanf("%d%d",&t,&w);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    scanf("%d%d%d",&a[i],&b[i],&c[i]);
    Dp(n);
    printf("%d\n",dp[t][w]);
    return 0;
}

注:不是贪心,是动态规划

0
我要回答