洛谷2530(codevs2098)化工厂装箱员
题目:https://www.luogu.org/problemnew/show/P2530
dp或搜索。
dp做法就是 当前值+1 转移到 当前某一维为0、位置前进了c位 的地方。但没写。
写了搜索的方法。细节众多,而且RE地莫名其妙!
搜索要注意记忆化。
特别奇怪的细节:代码中用注释(d数组)代替t1 t2 t3的话就会WA。
子函数中传参如果写成c[ ],就是不确定大小,于是不能用memcpy了。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF=;
int n,col[],tmp[],f[][][][];
char ch;
int num(char ch)
{
if(ch=='A')return ;
if(ch=='B')return ;
if(ch=='C')return ;
}
int dfs(int c[],int now)
{
if(f[now][c[]][c[]][c[]])return f[now][c[]][c[]][c[]];
if(!c[]&&!c[]&&!c[])return ;
int num=INF,j=;
int t1=c[],t2=c[],t3=c[];
// int d[5]={0};
// memcpy(d,c,sizeof c);
// d[1]=c[1];d[2]=c[2];d[3]=c[3];
for(int i=;i<=;i++)
{
if(!c[i])continue;
int t=c[i];
c[i]=;
for(j=now;j<now+t&&j<=n;j++)
c[col[j]]++;
num=min(num,dfs(c,j));
c[]=t1;c[]=t2;c[]=t3;
// memcpy(c,d,sizeof d);
// c[1]=d[1];c[2]=d[2];c[3]=d[3];
}
return f[now][c[]][c[]][c[]]=num+;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf(" %c",&ch);
col[i]=num(ch);
if(i<=)tmp[col[i]]++;
}
printf("%d",dfs(tmp,min(,n+)));
return ;
}
RE+WA+MLE代码(注意判断return 0和记忆化的那两句的位置是在补满10个以后):
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF=;
int n,col[],tmp[],f[][][][];
char ch;
int num(char ch)
{
if(ch=='A')return ;
if(ch=='B')return ;
if(ch=='C')return ;
}
int dfs(int c[],int now)
{
int k=-c[]-c[]-c[];
for(int i=now;i<now+k&&i<=n;i++)
c[col[i]]++;
if(!c[]&&!c[]&&!c[]&&now>)return ;
if(f[now][c[]][c[]][c[]])return f[now][c[]][c[]][c[]];
int d[]={},num=INF;
// d[1]=c[1];d[2]=c[2];d[3]=c[3];
memcpy(d,c,sizeof c);
for(int i=;i<=;i++)
{
if(!c[i])continue;
c[i]=;
num=min(num,dfs(c,now+k));
c[i]=d[i];
}
return f[now][c[]][c[]][c[]]=num+;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf(" %c",&ch);
col[i]=num(ch);
}
printf("%d",dfs(tmp,));
return ;
}
代码2
改了改上边之后的WA代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int INF=;
int n,col[],tmp[],f[][][][];
char ch;
int num(char ch)
{
if(ch=='A')return ;
if(ch=='B')return ;
if(ch=='C')return ;
}
int dfs(int c[],int now,int k)
{
// int k=10-c[1]-c[2]-c[3],l=0;
int l=;
for(l=now;l<now+k&&l<=n;l++)
c[col[l]]++;
if(f[now][c[]][c[]][c[]])return f[now][c[]][c[]][c[]];
if(!c[]&&!c[]&&!c[])return ;
int num=INF,t1=c[],t2=c[],t3=c[];
// d[1]=c[1];d[2]=c[2];d[3]=c[3];
// memcpy(d,c,sizeof c);
for(int i=;i<=;i++)
{
if(!c[i])continue;
int t=c[i];
c[i]=;
num=min(num,dfs(c,l,t));
// c[i]=d[i];
c[]=t1;c[]=t2;c[]=t3;
}
return f[now][c[]][c[]][c[]]=num+;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf(" %c",&ch);
col[i]=num(ch);
}
printf("%d",dfs(tmp,,));
return ;
}
代码3
洛谷2530(codevs2098)化工厂装箱员的更多相关文章
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...
- 洛谷P2530 [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...
- 洛谷 p2530 化工场装箱员(资源型)
化工场装箱员 https://www.luogu.org/problem/show?pid=2530 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的 ...
- 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy
本文为原创??? 作者写这篇文章的时候刚刚初一毕业…… 如有错误请各位大佬指正 从例题入手 洛谷P3915[HNOI2008]玩具装箱toy Step0:读题 Q:暴力? 如果您学习过dp 不难推出d ...
- 化工厂装箱员(洛谷 P2530)
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- 化工厂装箱员 洛谷 p2530
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- Luogu 2530 化工厂装箱员
Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...
- [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- [SHOI2001]化工厂装箱员(dp?暴力:暴力)
118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度 ...
随机推荐
- Oracle12c中性能优化&功能增强新特性之重大突破——内存列存储新特性
内存列存储(IM column store) 是Oracle12.1.0.2版本的主要特点.该特点允许列,表,分区和物化视图在内存中以列格式存储,而不是通常的行格式.数据存在内存中的好处显而易见,而列 ...
- laravel日志:
laravel日志写入方法之一: Log::info('Showing user profile for user: 147258369');把日志写入到某个方法中之后,执行方法之后,日志存储起来. ...
- UVALive 4168
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA08AAABMCAIAAAA6IBt+AAAgAElEQVR4nO1dybXjOg7tWJSK65yKxL
- 利用express.js连接mongodb数据库
var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = "mongodb://localhost:27017/ ...
- 玩转X-CTR100 | STM32F4 l GPIO位带操作
更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] STM32F4位带概念,及位带的GPIO操作实践应用. 原理介 ...
- String,StringBuilder和StringBuffer的特点和使用场景
这三个类是平时开发中经常遇到的,主要差别是运行速度和线程安全,使用起来String最方便了,另外两个稍微复杂一些. 从运行速度角度看,StringBuilder>StringBuffer> ...
- promise的生命周期
每个promise都会经历一个短暂的生命周期: 先是处于进行中(pending)状态,此时操作并未完成,所以他也是未处理的(unsettled): 一旦异步惭怍执行结束,promise则 变为已处理( ...
- magento -- 给Magento提速之缓存上的探索
依然在为Magento提速做努力,除了自带的缓存和编译,之前的所作的很多努力都是从减少JS,Css,图片等载入时间入手,而对页面载入耗时最早有时也是最大的一部分--获取页面数据没有做太多处理,以gap ...
- magento首页点击任何产品都出现404错误的问题方法
很简单,只要在其他项目上的根目录上复制一个.htaccess文件到项目跟目录下就可以 了,其实就是是设置伪静态:
- Object Tracking Benchmark
Abstract 问题: 1)evaluation is often not suffcient 2)biased for certain types of algorthms 3)datasets ...