社区讨论
原来爆零但是将答案减一就过了这是为什么?
P4170[CQOI2007] 涂色参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhjo5e2c
- 此快照首次捕获于
- 2025/11/04 05:45 4 个月前
- 此快照最后确认于
- 2025/11/04 05:45 4 个月前
CPP
#include <bits/stdc++.h>
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.1,sse4.2,popcnt,abm,mmx,avx,avx2,tune=native")
//#define FILENA ""
#define OUTPUT_TIME
// region Marcos, FasterIO and Utils
#ifdef __linux__
#ifndef FILENA
#define MMAP
#endif
#endif
#ifdef MMAP
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>
#endif
#ifndef FILENA
#ifndef ONLINE_JUDGE
#ifdef OUTPUT_TIME
#define DBGTIME
#endif
#endif
#endif
namespace IO{
#define isdigit(ch)(ch>='0'&&ch<='9')
namespace Fast{const size_t BUFSIZE=1<<20;
#ifdef MMAP
const int FD_STDIN=0,FD_STDOUT=1,FD_STDERR=2;char*rs,*re,wbuf[BUFSIZE],*ws=wbuf,*we=wbuf+BUFSIZE;struct MmapHelper{MmapHelper(){struct stat st;fstat(FD_STDIN,&st);rs=(char*)mmap(nullptr,st.st_size,PROT_READ,MAP_PRIVATE,FD_STDIN,0);re=rs+st.st_size;}}mh;inline char getchar(){return rs==re?EOF:*rs++;}inline void flush(){::write(FD_STDOUT,wbuf,ws-wbuf);ws=wbuf;}inline void putchar(char c){*ws++=c;if(ws==we)flush();}
#else
char rbuf[BUFSIZE],*rs=rbuf,*re=rbuf;char wbuf[BUFSIZE],*ws=wbuf,*we=wbuf+BUFSIZE;inline char getchar(){if(rs==re)re=(rs=rbuf)+fread(rbuf,1,BUFSIZE,stdin);return rs==re?EOF:*rs++;}inline void flush(){fwrite(wbuf,1,ws-wbuf,stdout);ws=wbuf;}inline void putchar(const char&c){*ws++=c;if(ws==we)flush();}
#endif
struct FlushHelper{~FlushHelper(){flush();}}fh;}using Fast::getchar;using Fast::putchar;template<class T>inline T&read(T&x){x=0;char f=1;char ch=getchar();for(;!isdigit(ch)&&ch!=EOF;ch=getchar())if(!(ch^45))f=-1;for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+(ch^48);x*=f;return x;}template<class First,class...Args>inline void read(First&first,Args&...args){read(first);read(args...);}template<class T>inline T&readReal(T&x){x=0.0;T f=1.0;char ch=getchar();for(;!isdigit(ch)&&ch!=EOF;ch=getchar())if(!(ch^45))f=-1.0;for(;isdigit(ch);ch=getchar())x=x*10.0+static_cast<T>(ch^48);if(ch=='.'){T b=0.1;for(ch=getchar();isdigit(ch);ch=getchar())x+=b*static_cast<T>(ch^48),b*=0.1;}x*=f;return x;}template<class First,class...Args>inline void readReal(First&first,Args&...args){readReal(first);readReal(args...);}template<class T>inline void write(T x){static char tmp[155],top;if(x<0)putchar(45),x=-x;if(x==0){putchar(48);return;}top=0;while(x)tmp[top++]=x%10^48,x/=10;while(top--)putchar(tmp[top]);}template<class T>inline void writeReal(T x,T eps=1e-11,int prec=9999){typedef __int128 FINT;static FINT i,l;static T f,b;static char c;if(x<0.0)putchar(45),x=-x;i=x;f=x-i;write(i);if(std::abs(f)<=eps)return;putchar(46);b=0.1;l=0;while(std::abs(f)>eps&&l<prec)c=floor(f/b),f-=b*c,putchar(c^48),b*=0.1,l++;}template<class T>inline void writeReal(T x,int prec){writeReal(x,static_cast<T>(0),prec);}inline void endl(){putchar(10);}inline void space(){putchar(32);}inline void tab(){putchar(9);}inline void puts(const char*c){static const char*p;p=c;while(*p)putchar(*p++);}inline int gets(char*s){static char ch;static int len;len=0;ch=getchar();while(ch=='\n')ch=getchar();while(ch!='\n'&&ch!=EOF)*s++=ch,++len,ch=getchar();*s=0;return len;}
#define endl endl()
#define space space()
#define tab tab()
}using namespace IO;using namespace std;
namespace utils{
#define getchar ::IO::getchar
#define putchar ::IO::putchar
#define puts ::IO::puts
#define gets ::IO::gets
template<class T>using minheap=priority_queue<T,vector<T>,greater<>>;template<class T>using maxheap=priority_queue<T,vector<T>,less<>>;template<class T>void debug(T z){write(z);tab;}template<class First,class...Args>void debug(First first,Args...args){debug(first);debug(args...);}
#define defmm(T)constexpr T max(T a,T b){return a>b?a:b;}constexpr T max(T a,T b,T c){return max(a,max(b,c));}constexpr T max(T a,T b,T c,T d){return max(a,b,max(c,d));}constexpr T max(T a,T b,T c,T d,T e){return max(a,b,c,max(d,e));}constexpr T min(T a,T b){return a>b?b:a;}constexpr T min(T a,T b,T c){return min(a,min(b,c));}constexpr T min(T a,T b,T c,T d){return min(a,b,min(c,d));}constexpr T min(T a,T b,T c,T d,T e){return min(a,b,c,min(d,e));}
#define ddefmm(T)defmm(T)defmm(unsigned T)
ddefmm(short)ddefmm(int)ddefmm(long)ddefmm(long long)ddefmm(__int128)defmm(float)defmm(double)defmm(long double)}using namespace utils;void solve();
signed main() {
#ifndef FILENA
#ifndef ONLINE_JUDGE
#ifndef MMAP
freopen(".in", "r", stdin);
#endif
freopen(".out", "w", stdout);
#endif
#else
freopen(FILENA".in", "r", stdin);
freopen(FILENA".out", "w", stdout);
#endif
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
#ifdef DBGTIME
auto beg = std::chrono::system_clock::now().time_since_epoch();
solve();
auto end = std::chrono::system_clock::now().time_since_epoch();
std::chrono::nanoseconds na = end - beg;
puts("Time used: ");
write(na.count() / 1000000000), putchar('.');
int nn = na.count() % 1000000000;
int l = 8 - int(log10(nn));
for (int i = 0; i < l; ++i) putchar('0');
write(nn), puts(" secs"), endl;
#else
solve();
#endif
return 0;
}
// endregion
using ll = long long;
using ld = long double;
using ull = unsigned long long;
constexpr int N = 50 + 5, M = 26 + 2, inf = 0x3f3f3f3f;
int n;
char s[N];
int f[N][N];
void solve() {
n = gets(s + 1);
memset(f, 0x3f, sizeof f);
for (int len = 1; len <= n; ++len) {
for (int i = 1; i <= n - len + 1; ++i) {
const int j = i + len - 1;
if (len == 1) f[i][j] = 1;
else {
f[i][j] = inf;
if (s[i] == s[j]) f[i][j] = min(f[i + 1][j], f[i][j - 1]);
for (int k = i; k < j; ++k) {
f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j]);
}
}
}
}
write(f[1][n] - 1), endl;
}
最后的
f[1][n]-1是为什么?为啥-1就过了?回复
共 3 条回复,欢迎继续交流。
正在加载回复...