首页 > 其他分享 >ICPC2022Hangzhou C No Bug No Game 题解

ICPC2022Hangzhou C No Bug No Game 题解

时间:2023-12-03 13:22:05浏览次数:50  
标签:ch No int 题解 sum ret Game 物品

Link

ICPC2022Hangzhou C No Bug No Game

Question

给定 \(n\) 个物品和上限 \(k\),要求最大化分数,物品的选择顺序可以任意

第 \(i\) 个物品一行 \(p_i\) 代表个数,后面 \(p_i\) 个 \(w_j\) 代表容量,定义 \(sum=\sum\limits_{j=1}^{i-1}\) ,对于第 \(i\) 个物品

  • \(sum+p_i \le k\) 得到 \(w_{i,p_i}\) 的分
  • \(sum>k\) 不得分呢
  • 否则得到 \(w_{i,k-sum}\) 的分

Solution

可以看成是背包问题的变形,\(sum\) 为背包的容量,第一种情况就是全部塞进去,第二种情况就是塞不进去,第三种情况就是塞了半个东西进去

定义 \(F[i][j][0/1]\) 表示从前 \(i\) 个物品中选,总和为 \(j\) ,\(0\) 表示没有塞半个东西进去,\(1\) 表示已经塞了半个东西进去

转移就是背包的正常转移,需要注意第三维只能从 \(0->1\)

答案就是 \(\max (F[N][j][0/1])\ (j\le k)\)

Code

#include<bits/stdc++.h>
using namespace std;
const int maxn=3005;
int N,K;
int F[maxn][maxn][2],w[15];
inline int read(){
	int ret=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
	while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
	return ret*f;
}

int main(){
    N=read();K=read();
    
    memset(F,-0x3f,sizeof F);
    F[0][0][0]=0;
    for(int i=1;i<=N;i++){
        int p=read();
        for(int j=1;j<=p;j++) w[j]=read();
        for(int j=K-1;j>=0;j--){
            F[i][j][0]=F[i-1][j][0];F[i][j][1]=F[i-1][j][1];
            if(j+p<=K){ 
                F[i][j+p][0]=max(F[i][j+p][0],F[i-1][j][0]+w[p]);
                F[i][j+p][1]=max(F[i][j+p][1],F[i-1][j][1]+w[p]);
            }
            for(int now_k=1;now_k<p;now_k++){
                if(j+now_k<=K){
                    F[i][j+now_k][1]=max(F[i][j+now_k][1],F[i-1][j][0]+w[now_k]);
                }
            }
        }
    }
    int ans=0;
    for(int i=1;i<=N;i++)
    for(int j=0;j<=K;j++){
        ans=max(ans,F[i][j][0]);
        if(j==K) ans=max(ans,F[i][j][1]);
    }
    printf("%d\n",ans);
    return 0;
}

标签:ch,No,int,题解,sum,ret,Game,物品
From: https://www.cnblogs.com/martian148/p/17872889.html

相关文章

  • nodejs002
    数组//数组//Java数组必须是同一类型//但是js的数组没有数据类型区分,一个数组里既可以有数值,字符等letarr=[1,3,4,2,5,6,7,2,3]//数组的长度letlen=arr.length//遍历arr.forEach(item=>{console.log(item);})//数组的过滤,把符合条件的结果,返回新的数......
  • ICPC2022Hangzhou A Modulo Ruins the Legend 题解
    LinkICPC2022HangzhouAModuloRuinstheLegendQuestion求$$\sum\limits_{i=1}^na_i+n\timess+\frac{n(n+1)}{2}\timesd\modm$$的最小值Solution我们把这个式子看成一一个二元不定方程\(ax+by+sum\modm\)的最小值,其中\(a=n,b=\frac{n(n+1)}{2},sum=\sum\limits......
  • ucup nanjing 题解
    比赛链接D收获很大的一道题首先考虑朴素的\(dp\),令\(f_{x,i}\)为\(x\)子树中的每一个叶子到\(x\)的距离都为\(i\)的最小代价不难列出\(dp\)式子为:\(f_{x,i}=\min\limits_{i\in\{0,1\}}\{cost(u,i)+\sum\limits_{v\inson(u)}f_{v,x-i}\}\),其中\(cost(u,i)\)为把......
  • matplotlib报错:AttributeError: module 'backend_interagg' has no attribute 'Figure
    使用本地python环境可以成功执行importpandasaspdimportmatplotlib.pyplotasplt#设置字体plt.rcParams['font.sans-serif']=['SimHei']#能正确显示负号plt.rcParams['axes.unicode_minus']=False#设置画布大小plt.figure(figsize=(11,8))#柱状图pat......
  • Jupyter Notebook的使用
    什么是Jupyter NotebookJupyterNotebook是一个基于Web的交互式计算环境,支持多种编程语言,包括Python、R、Julia等。它的主要功能是将代码、文本、数学方程式、可视化和其他相关元素组合在一起,创建一个动态文档,用于数据分析、机器学习、科学计算和数据可视化等方面。JupyterN......
  • 【小沐学前端】Node.js实现基于Protobuf协议的数据处理
    1、简介1.1nodeNode.js是一个开源的、跨平台的JavaScript运行时环境。Node.js是一个开源和跨平台的JavaScript运行时环境。它是几乎任何类型项目的流行工具!Node.js在浏览器之外运行V8JavaScript引擎(GoogleChrome的内核)。这使得Node.js非常高效。2、Protobu......
  • [https @ 000001a69f0bae00] Protocol 'https' not on whitelist 'file,crypto,data'!
    ffmpeg下载视频并合并到一个视频中,执行如下命令:ffmpeg-iindex.m3u8-ccopyresult.mp4出现[https@000001a69f0bae00]Protocol'https'notonwhitelist'file,crypto,data'!问题,详情如下: 因fmpeg默认不使用https协议,https协议没有在白名单内,所以无法下......
  • CF1288题解
    CF1288EducationalCodeforcesRound80(RatedforDiv.2)A略CF1288BlinkCF1288B题意给定\(A,B\),问有多少个二元组\((a,b)\)满足\(1\lea\leA,1\leb\leB\)且\(a\cdotb+a+b=\operatorname{conc}(a,b)\)。其中\(\operatorname{conc}(a,b)\)表示将\(a,b\)......
  • 51nod 2620 序列问题
    原题首先\(O(n\logn)\)的贪心很好想,显然用堆,每次合并两个权值最小的即可然后考虑\(O(n)\)怎么做?我们发现这个权值\(\max(a_i,a_{i+1})\)的\(\max\)很不好处理,因此我们考虑把他优化一下使用单调栈可以求出权值为\(a_i\)的合并区间,然后我们发现对于合并一个区间答案......
  • 【游记】HE CSP-S&NOIP 游寄
    CSP-S\NOIP游寄我放假了,我马上就走,但是我先写个游寄(CSP-S只有复赛的,原因:再往前忘了(10.xx.23把锅巴惹了,然后他不让我训练了(悲我们实验二是这样的10.20.23落地qhd,终于回家力,特别开心我妈请TH的老师和学长学姐吃了螃蟹,但是全桌只有她自己会剥(?10.21.23没报J组,上午在......