首页 > 其他分享 >背包DP

背包DP

时间:2025-01-23 18:53:15浏览次数:1  
标签:ch int sum long 背包 ll DP

- P2340 [USACO03FALL] Cow Exhibition G

  • 思路:

我们发现,跟状态有关的三个值:\(S\) , \(F\) , \(S+F\),我们只需要知道其中的两个就可以推出剩下一个,所以,我们可以选其中一个做体积,一个做价值,跑一遍 \(01\)背包即可。

#include<bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
inline ll rd(){
	ll x=0;
	int f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	} 
	while(ch>='0'&&ch<='9'){
		x=1ll*x*10+ch-'0';
		ch=getchar();
	}
	return x*f;
}
int n;
struct cow{
	int a,b;
}c[450];
ll sum[1800002];
void init(){
	n=rd();
	for(int i=1;i<=n;i++) c[i].a=rd(),c[i].b=rd();
}
void solve(){
    memset(sum,-0x3f,sizeof sum);
    sum[400000]=0;
	for(int i=1;i<=n;i++){
		if(c[i].a>=0){
            for(int j=800000;j>=c[i].a;j--){
                sum[j]=max(sum[j],sum[j-c[i].a]+c[i].b);
            }
        }
        else{
            for(int j=0;j<=800000+c[i].a;j++){
                sum[j]=max(sum[j],sum[j-c[i].a]+c[i].b);
            }
        }
	} 
}
void print(){
	ll maxx=-1e8;
	for(int i=400000;i<=800000;i++)
        if(sum[i]>=0)
            maxx=max(maxx,sum[i]+i-400000);
	cout<<maxx;
}
signed main(){
	init();
	solve();
	print();
}

标签:ch,int,sum,long,背包,ll,DP
From: https://www.cnblogs.com/yueyanWZF/p/18688497

相关文章

  • WordPress Technical Stack
    -[Wordpress-WordPressTechStack](https://stackshare.io/wordpress/wordpress) StackStack Decisions   ApplicationandData(3) PHP NGINX EdgeCast  Utilities(4) GoogleAnalytics Elasticsearc......
  • k8s工作负载-RS&&DP&&DS
    1RS:ReplicaSet的目的是维护一组在任何时候都处于运行状态的Pod副本的稳定集合。因此,它通常用来保证给定数量的、完全相同的Pod的可用性。它也是deployment资源的基础资源,来整副本的稳定性。23RS资源实例4[root@k8smaster01~]#catnginx-rs.yaml5......
  • 关于此题[ABC343G] Compress Strings 状压DP的一些总结
    传送门通过这道题也是让我对TSP问题有了更深的理解。首先这道题中给定n个字符串,我们发现n的范围只有20。让我们求这n个字符串作为同一个字符串的子串时,该字符串最短是多少。我们发现,如果有一个字符串被另一个字符串完全包含,那么它对答案是没有影响的,所以我们可以先用哈希标记......
  • 服务器实现lldp协议
    1.安装lldpad服务yuminstall-ylldpad2.启动并设置开机自启systemctlenablelldpad--now3.启动网卡脚本#!/bin/bashforiin$(ls/sys/class/net/|grep-E"ens|em|eth|p");do#设置需要配置的网卡 echo"enablinglldpforinterface:$i"; lldptoolset-lld......
  • LWIP UDP使用
    MCU:小华HC32F4A0板子没有合适的接口作为串口输出了,调试有点困难,想了个办法把lwip的UDP重定向到fputc函数代码参考:https://www.cnblogs.com/54zorb/p/9609021.htmlUDP相关代码/*********************************UDP测试************************************//*udp控制......
  • 【动态规划】01背包专题
    01背包在恰好等于的情况下求最小物品数MELON的难题每个物品(石头)的价值w[i]就是其自己的个数,为1体积题目已给出。状态定义:f[i][j]表示在前i个物品中选,且体积总和恰好等于j需要的物品个数的最小值初始化:f[i][0]=0,1<=i<=nf[0][j]=INF,1<=j<=m,答案是f[n][m]......
  • 数位 dp
    首先看一道例题Example01[P2602数字统计]求[l,r]中每个数字出现了多少次(1<=l,r<=1e12)Solution这题直接for肯定会TLE我们思考用一个dp数组dp[i][j][k]表示搜到第i位,保证最高位为j,数字k的出现次数(比如dp[2][1][1]就表示[0,19]有多少个1)......
  • 【做题记录】2025提高刷题-dp
    A.Min-FundPrison(Medium)考虑一个边双连通分量一定不可能分为合法的两部分,于是进行缩点。缩完后显然是一个森林。设\(dp_{i,j,0/1}\)表示第一堆有\(i\)个点,第二堆有\(j\)个点,两堆点有没有用一条边连起来的最小花费。对于每棵树,考虑将它加入第一堆/加入第二堆/一部分加......
  • 【动态规划】落花人独立,微雨燕双飞 - 8. 01背包问题
    本篇博客给大家带来的是01背包问题之动态规划解法技巧.......
  • 实数域上的DP?——[AGC020F] Arcs on a Circle
    #实数域上的DP?——[AGC020F]ArcsonaCircle有点没搞懂。---注意到线段长度为整数,即li和ri的小数部分一定相同而判断两个线段是否相交只会用到l和r的相对大小关系,所以可以对小数部分离散化然后就可以dp了。先断环为链,$n!$暴力枚举小数部分相对大小,离散化以后一共......