Pro
Sol
智子
CQ07年省选题……区间DP
当i==j时,子串明显只需要涂色一次,于是f[i][j]=1。
当i!=j且s[i]==s[j]时,可以想到只需要在首次涂色时多涂一格即可,于是f[i][j]=min(f[i][j-1],f[i+1][j])
当i!=j且s[i]!=s[j]时,我们需要考虑将子串断成两部分来涂色,于是需要枚举子串的断点,设断点为k,那么f[i][j]=min(f[i][j],f[i][k]+f[k+1][j])
由于f[i][j]的定义,我们可以知道f[1][n]即为答案。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string s;
int n , f[105][105];
inline int mymin(int a , int b) { return a<b?a:b; }
int main() {
cin>>s;
n = s.length();
memset(f , 0x3f , sizeof(f));
for(int i=0; i<n; i++)
f[i][i] = 1;
for(int len=1; len<n; len++) {
for(int i=0; i<n; i++) {
int j = i+len;
if(s[i]==s[j])
f[i][j] = mymin(f[i+1][j] , f[i][j-1]);
else
for(int k=i; k<j; k++)
f[i][j] = mymin(f[i][j] , f[i][k]+f[k+1][j]);
}
}
printf("%d",f[0][n-1]);
return 0;
}
人列计算机
第一时间联想到了NOI2015的程序自动分析……
集合什么的水了水……
上标程
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
int fa[200010],siz[200010];
int get(int x){
return fa[x]==x?x:get(fa[x]);
}
int a[200010],b[200010],c[200010];
set<int> ueq[200010];
int n;
int cc[200010],num;
int main(){
freopen("distinguish.in","r",stdin);
freopen("distinguish.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
cc[++num]=a[i];
cc[++num]=b[i];
}
sort(cc+1,cc+num+1);
num=unique(cc+1,cc+num+1)-(cc+1);
for(int i=1;i<=n;i++){
a[i]=lower_bound(cc+1,cc+num+1,a[i])-cc;
b[i]=lower_bound(cc+1,cc+num+1,b[i])-cc;
}
for(int i=1;i<=num;i++) fa[i]=i,siz[i]=1;
for(int i=1;i<=n;i++){
if(c[i]==1){
int x=a[i],y=b[i];
x=get(x);
y=get(y);
if(ueq[x].find(y)!=ueq[x].end()){
puts("NO");
continue;
}
puts("YES");
if(x==y) continue;
if(siz[x]>siz[y]) swap(x,y);
fa[x]=y;
siz[y]+=siz[x];
for(set<int>::iterator it = ueq[x].begin();it!=ueq[x].end();++it){
int z = *it;
ueq[z].erase(x);
ueq[z].insert(y);
}
ueq[y].insert(ueq[x].begin(),ueq[x].end());
}else{
int x=a[i],y=b[i];
x=get(x);
y=get(y);
if(ueq[x].find(y)!=ueq[x].end()){
puts("YES");
continue;
}
if(x==y) {
puts("NO");
continue;
}
puts("YES");
ueq[x].insert(y);
ueq[y].insert(x);
}
}
fclose(stdout);
return 0;
}
歌者
不会状压DP……搜索还爆long long!待更。