SHOI2001化工厂装箱员——记忆化搜索
题目:https://www.luogu.org/problemnew/show/P2530
太弱了不会用DP,于是暴搜;
每次传进一个数组c记录当前状态各种物品有多少个,枚举取哪种物品,返回最小值,外加记忆化;
因为各种愚蠢小错误WA了好久。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,c[],a[],f[][][][],inf=;
char dc;
int ch(char c)
{
if(c=='A')return ;
if(c=='B')return ;
if(c=='C')return ;
}
//void dfs(int c[],int now,int x)
//{
// int c1=c[1],c2=c[2],c3=c[3];
//// if(f[now][c1][c2][c3])return;
//// cout<<c1<<c2<<c3;
//// cout<<x<<endl;
// if(!c1&&!c2&&!c3)
// {
// ans=min(ans,x);
// return;
// }
// int j;
// for(int i=1;i<=3;i++)
// {
// if(!c[i])continue;//!
// int k=c[i];
// c[i]=0;
// for(j=now+1;j<=now+k&&j<=n;j++)
// c[a[j]]++;
// f[now][c[1]][c[2]][c[3]]=min(f[now][c[1]][c[2]][c[3]],x+1);
// dfs(c,j,f[now][c[1]][c[2]][c[3]]);
// c[1]=c1;c[2]=c2;c[3]=c3;
// }
//}
int dfs(int c[],int now)
{
if(f[now][c[]][c[]][c[]])return f[now][c[]][c[]][c[]];
if(!c[]&&!c[]&&!c[])return ;
int ans=inf;
for(int i=;i<=;i++)
{
if(!c[i])continue;
int t1=c[],t2=c[],t3=c[],j,t=c[i];
c[i]=;
for(j=now;j<now+t&&j<=n;j++)
c[a[j]]++;
ans=min(ans,dfs(c,j));
c[]=t1;c[]=t2;c[]=t3;
}
ans++;//
f[now][c[]][c[]][c[]]=ans;
return ans;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
cin>>dc;
if(dc=='A')a[i]=;
if(dc=='B')a[i]=;
if(dc=='C')a[i]=;
}
int i;
for(i=;i<=&&i<=n;i++)c[a[i]]++;//
printf("%d",dfs(c,i));//
return ;
}
SHOI2001化工厂装箱员——记忆化搜索的更多相关文章
- 洛谷 P2530 [SHOI2001]化工厂装箱员 解题报告
P2530 [SHOI2001]化工厂装箱员 题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B ...
- [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- [SHOI2001]化工厂装箱员(dp?暴力:暴力)
118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不同纯度 ...
- 洛谷P2530 [SHOI2001]化工厂装箱员
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...
- 解题:SHOI2001 化工厂装箱员
题面 题外话:从零开始的DP学习系列之壹(我真的不是在装弱,我DP真的就这么烂TAT) 从lyd那里学到了一点DP的小技巧,在设状态时可以先假装自己在做搜索,往一个函数里传了一些参数,然后把这些参数抓 ...
- 【题解】SHOI2001化工厂装箱员
————传送:洛谷P2530 这道题目还是挺简单的,状态也容易想到. 数据范围非常的小,所以即便是很多维度,复杂度也完全可以接受.定义状态:dp[i][a][b][c]为手上的货物拿到第i个时三种物品 ...
- LG2530 「SHOI2001」化工厂装箱员 高维DP+记忆化搜索
问题描述 LG2530 题解 设\(opt[i][a][b][c][d]\)代表装到第\(i\)个后,第\(1,2,3\)手上分别还剩\(a,b,c\)个的最小操作数. 记忆化搜索即可. 启示:如果状 ...
- 化工厂装箱员(洛谷 P2530)
题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须 ...
- Luogu 2530 化工厂装箱员
Written with StackEdit. Description \(118\)号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有\(3\ ...
随机推荐
- 开源项目WebImageView载入图片
项目地址:https://github.com/ZaBlanc/WebImageView 作者对载入图片,以及图片的内存缓存和磁盘缓存做了封装. 代码量不多.可是可以满足一般的载入图片. 先看下项目结 ...
- 深入Asyncio(二)从线程到协程
线程的真相 多线程并不是一无是处,在实际问题中,要权衡优劣势来选择多线程.多进程或是协程.协程为多线程的某些问题提供了一种解决方案,所以学习协程首先要对线程有一定了解. 多线程优点 代码可读性 多线程 ...
- wpf 获取datagrid 模板列中的控件
目前采用的 方法 (网上提供的一款) public static DataGridRow GetRow(DataGrid datagrid, int columnIndex) { ...
- Socket的错误码和描述
//下面是Socket Error的错误码和描述: Socket error 0 - Directly send error Socket error 10004 - Interrupted fun ...
- WebApi 传参详解(转)
一.无参数Get请求 一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现: 请求的后台Action方法仍为上篇文章中 ...
- HttpClient 访问 https 出现peer can't
package util; import java.security.cert.CertificateException; import javax.net.ssl.SSLContext;import ...
- c++ get the pointer from the reference
int x = 5; int& y = x; int* xp = &x; int* yp = &y; xp is equal to yp. 也就是说,直接对reference取 ...
- 【题解】CF559C C. Gerald and Giant Chess(容斥+格路问题)
[题解]CF559C C. Gerald and Giant Chess(容斥+格路问题) 55336399 Practice: Winlere 559C - 22 GNU C++11 Accepte ...
- JavaScript演示如何访问Search字段
<!DOCTYPE html> <html> <body> <h3>演示如何访问Search字段</h3> <input type=& ...
- .net编程扫盲(*)
http://www.cnblogs.com/edisonchou/p/4787775.html