首页 > 其他分享 >暑假集训D2 2023.7.25 补题

暑假集训D2 2023.7.25 补题

时间:2023-07-25 20:23:48浏览次数:30  
标签:25 int cin dep 2023.7 补题 include dp 110

D.P1796 汤姆斯的天堂梦

这道题目非常ex,赛时死活调不出来,思路是对的,容易发现是一个DAG,所以直接DP就好,虽然后面看题解AC了,发现是重边的问题。但还是来记录一下这道ex的题目,警醒一下自己切记注意重边!!
如下两份代码,一份爆0,一份AC

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define endl '\n'
#define int long long
using namespace std;

const int N = 1e5+10;
int dp[110][110];
int n,k[110];
int g[110][110][110];

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n;
	memset(dp,0x3f,sizeof dp);
	memset(g,0x3f,sizeof g);
	
	k[0] =1;
	dp[0][1]  =0;
	for(int i =1;i<=n;i++)
	{
		cin>>k[i];
		for(int j =1;j<=k[i];j++)
		{
			int x,cost;
			while(cin>>x&&x)
			{
				cin>>cost;
				g[i-1][x][j] = cost;
				
			}
		}
	}
	
	
	for(int dep= 1;dep<=n;dep++)
	{
		for(int i =1;i<=k[dep];i++)
		{
			for(int j =1;j<=k[dep-1];j++)
			{
				dp[dep][i] = min(dp[dep][i],dp[dep-1][j]+g[dep-1][j][i]);
				//cout<<dep<<":"<<j<<" "<<i<<" "<<dp[dep][i]<<endl;
			}
			
		}
	}
	int res = 2147483647;
	for(int i =1;i<=k[n];i++)
	{
		res = min(res,dp[n][i]);
	}
	cout<<res;
	return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define endl '\n'
#define int long long
using namespace std;

const int N = 1e5+10;
int dp[110][110];
int n,k[110];
int g[110][110][110];

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n;
	memset(dp,0x3f,sizeof dp);
	memset(g,0x3f,sizeof g);
	
	k[0] =1;
	dp[0][1]  =0;
	for(int dep =1;dep<=n;dep++)//星球等级
	{
		cin>>k[dep];
		for(int i =1;i<=k[dep];i++)//终点
		{
			int j,cost;//j为起点,cost为从j到i的花费
			while(cin>>j&&j)
			{
				cin>>cost;
				g[dep-1][j][i] = cost;
				
				dp[dep][i] = min(dp[dep][i],dp[dep-1][j]+g[dep-1][j][i]);
			}
		}
	}
	
	int res = 2147483647;
	for(int i =1;i<=k[n];i++)
	{
		res = min(res,dp[n][i]);
	}
	cout<<res;
	return 0;
}

只需要输入时取g[i-1][x][j] = min(g[i-1][x][j],cost);

L. P2663 越越的组队

看了半天题目毫无头绪.遂看题解

此题为背包变形题目,每个同学只能选1次,跟01背包非常类似.容量上限就是\(sum/2\).01背包一维是记录前i个人,一维记录当前的分数.但是加了一个限制:必须选择恰好一半的同学.
因此加一维记录一下选的人数就好了.
dp[i][j][k]表示前i个人中选j个总分是否能达到k
朴素背包代码如下

for(int i=1;i<=n;i++)
{
	dp[i][0][0] =1;
	for(int j = 1;j<=i;j++)
	{
		for(int k = 0;k<=5000;k++)
		{
			dp[i][j][k] = dp[i-1][j][k];
			if(!dp[i][j][k]&&k>=a[i])
			{
				dp[i][j][k] = dp[i-1][j-1][k-a[i]];
			}
		}
	}
}

可以对第一层进行压缩.不再赘述
完整代码

点击查看代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define endl '\n'
using namespace std;
const int N = 1e5+10;
int dp[110][10010];
int n;
int a[N];
int sum = 0;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		sum+=a[i];
	}
	dp[0][0] =1;
	for(int i=1;i<=n;i++)
	{
		for(int j = i;j>=1;j--)
		{
			for(int k = 5000;k>=0;k--)
			{
				//dp[i][j][k] = dp[i-1][j][k];
				if(!dp[j][k]&&k>=a[i])
				{
					dp[j][k] = dp[j-1][k-a[i]];
				}
			}
		}
	}
	int res = 0;
	for(int i =0;i<=sum/2;i++)
	{
		if(dp[n/2][i])
		{
			res = i;
		}
	}
	cout<<res;
	return 0;
}

标签:25,int,cin,dep,2023.7,补题,include,dp,110
From: https://www.cnblogs.com/oijueshi/p/17580920.html

相关文章

  • 2023年7月25日,File类,IO流
    File类1.概述File,是文件和目录路径的抽象表示File只关注文件本身的信息,而不能操作文件里的内容。如果需要读取或写入文件内容,必须使用IO流来完成。在Java中,java.io.File类用于表示文件或目录的抽象路径名。它提供了一组方法,可以用于创建、访问、重命名、删除文件或目录,以及获取......
  • 基于32位Cortex®-M4内核MK26FN2M0VMI18、MK22FN256VMP12、MK22FN512VLL12 180MHz/120
    一、MK26FN2M0VMI18KinetisK2032位微控制器是一款低功耗MCU,通过智能片上集成节省了大量BOM。该MCU基于Arm®Cortex®-M4核心,提供完整和可选的高速USB2.0(OTG控制器),包括无晶器件功能选项。此器件具有2MB的闪存,256KB的SRAM和多达2个USB控制器。详细描述:ARM®Cortex®-M4Kine......
  • 学习生理基础 | 记忆的四个环节2——保持 | 2023年7月25日
    小虾米原创作品,转载请注明出处:https://www.cnblogs.com/shrimp-can/p/17580595.html我们都想高效学习,但如何实现呢?网络上充斥着各种记忆、学习的技巧,能给予我们很大的帮助。但我始终认为,要做好一件事,须得“顺势而为”。那对于学习,什么是这个“势”呢?我认为便是人学习的生理和心......
  • 7.25
    #include<iostream>#include<stdio.h>#include<string>usingnamespacestd;intmain(){intn;cin>>n;inta[1001]={0};for(inti=0;i<n;i++){inttemp;cin>>temp;f......
  • 7.25总结
    今天那个idea过期了,原来我以为弄的学生认证可以,但是发现不知为啥没有成功,我也不愿意再搞这个了,后来想起来可以在淘宝买密钥啊,于是找了一个发现买了之后0元,这令我震惊啊正好白嫖,然后昨晚弄的GitHub不是很成功,今天成功上传了项目,但是再往里面传入另外一个就不行,还在找错误......
  • 7.25 day2数据结构优化dp
    战绩:100+100+20+54=374T1据lxl说是为了成绩好看加的题,难度大概cspjT1T2朴素dp然后树状数组优化一下T3赛时脑抽链,写了个dp,一直想优化dp,其实贪心就好了,过程更加简洁,优化很显然先将区间剖分成两段端点\(s_i=s_j\)相同的多条线段将区间每个点吸附到离他右边最近的一个线段......
  • 补题报告之S班暑训第二场
    成绩比赛经过糟糕记不清了?\(\text{A}\)题,结论很显然,不出意外应该是很快就搞出来了,但是没有考虑所给的子图可能不连通!挂成\(\text{50}\)了?\(\text{B}\)题,一眼\(\text{DP}\)事实证明我是对的。但是我对一个子问题\(\text{DP}\)。考虑的是\(0\)时刻的方案选取数,本来想......
  • 不坑盒子 2023.0725 官方最新版
    2023.0725•不坑盒子支持Excel和PPT了,相对功能还较少。•修复在Office黑色风格模式下插件界面卡顿的Bug•修复“28*22”每行只有20个字的Bug•修复“新自动排版”中,在开启“大纲样式”的情况下,如果匹配到的内容只是段落中的某一句,会把整个段落设置为“大纲样式”的Bug•新增......
  • CodeForces 725F Family Photos
    洛谷传送门CF传送门不错的贪心题。我们考虑一对照片只有一张的情况。那么先后手会按照\(a+b\)降序取。因为若\(a_i+b_i\gea_j+b_j\),变形得\(a_i-b_j\gea_j-b_i\)且\(b_i-a_j\geb_j-a_i\),所以对于双方先取\(i\)一定是不劣的。回到原题,如果\(a_{i......
  • 【2023-07-25】五年计划
    20:00幸福是什么?是打仗吗?不是。是打架吗?不是。幸福能令人感到可爱、亲切、美好、愉快、平静和快活吗?噢,是的!                                                 ——狄更斯......