2 条题解

  • 0
    @ 2025-10-8 17:00:46
    #include <bits/stdc++.h>
    using namespace std;
    const int N=410, inf=4e4, M=inf*2+10;
    int f[M];
    struct node{int iq, eq;} a[N];
    int main(){
        int n; scanf("%d", &n);
        for(int i=1; i<=n; i++)
            scanf("%d%d", &a[i].iq, &a[i].eq);
        memset(f, -0x3f, sizeof(f));
        f[inf]=0; int ans=0;
        for(int i=1; i<=n; i++){
            if(a[i].iq>=0){
                for(int j=2*inf; j>=a[i].iq; j--)
                    f[j]=max(f[j], f[j-a[i].iq]+a[i].eq);
            }
            else{
                for(int j=0; j<=2*inf+a[i].iq; j++)
                    f[j]=max(f[j], f[j-a[i].iq]+a[i].eq);
            }
        }
        for(int i=inf; i<=2*inf; i++) if(f[i]>0)
            ans=max(ans, i+f[i]-inf);
        printf("%d\n", ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 17:00:36
      #include<bits/stdc++.h>
      using namespace std;
      const int N=410, inf=4e4, M=inf*2+10;
      int f[M];
      struct node{int iq, eq;} a[N];
      int main(){
      	int n; scanf("%d", &n);
      	for(int i=1; i<=n; i++)
      		scanf("%d%d", &a[i].iq, &a[i].eq);
      	memset(f, -0x3f, sizeof(f));
      	f[inf]=0; int ans=0;
      	for(int i=1; i<=n; i++){
      		if(a[i].iq>=0){
      			for(int j=2*inf; j>=a[i].iq; j--)
      				f[j]=max(f[j], f[j-a[i].iq]+a[i].eq);
      		}
      		else{
      			for(int j=0; j<=2*inf+a[i].iq; j++)
      				f[j]=max(f[j], f[j-a[i].iq]+a[i].eq);
      		}
      	}
      	for(int i=inf; i<=2*inf; i++) if(f[i]>0)
      		ans=max(ans, i+f[i]-inf);
      	printf("%d\n", ans);
      	return 0;
      } 
      • 1

      USACO(115)动态规划(背包型)3:奶牛会展P2340 [USACO03FALL] Cow Exhibition G

      信息

      ID
      2306
      时间
      1000ms
      内存
      128MiB
      难度
      8
      标签
      递交数
      16
      已通过
      8
      上传者