社区讨论
记忆化搜索 RE求调
UVA1629切蛋糕 Cake slicing参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m20dl6my
- 此快照首次捕获于
- 2024/10/08 19:46 去年
- 此快照最后确认于
- 2025/11/04 17:38 4 个月前
rt
UVA1629
C/* Erica N */
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define int long long
#define ull unsigned long long
#define pii pair<int, int>
#define ps second
#define pf first
#define itn int
#define rd read()
int read(){
int xx = 0, ff = 1;char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-')ff = -1; ch = getchar();}
while (ch >= '0' && ch <= '9')xx = xx * 10 + (ch - '0'), ch = getchar();
return xx * ff;
}
#define cdbg(x...) do { cerr << #x << " -> "; err(x); } while (0)
void err() { cerr << endl; }
template<template<typename...> class T, typename t, typename... A>
void err(T<t> a, A... x) { for (auto v: a) cerr << v << ' '; err(x...); }
template<typename T, typename... A>
void err(T a, A... x) { cerr << a << ' '; err(x...); }
const int N = 3e1 + 5;
const int INF = 1e18;
const int M = 1e7;
const int MOD = 1e9 + 7;
int x[N];
int y[N];
int f[N][N][N][N];
int p[N][N];
inline int check(int x,int y,int a,int b){
return p[a][b]-p[a][y-1]-p[x-1][b]+p[x-1][y-1];
}
int dfs(int x,int y,int a,int b){
if(INF>f[x][y][a][b])return f[x][y][a][b];
if(check(x,y,a,b)==1)return f[x][y][a][b]=0;
for(int i=x;i<a;i++){
if(check(x,y,i,b)>=1&&check(i+1,y,a,b)>=1){
f[x][y][a][b]=min(f[x][y][a][b],dfs(x,y,i,b)+dfs(i+1,y,a,b)+b-y+1);
}
}
for(int i=y;i<b;i++){
if(check(x,y,a,i)>=1&&check(x,i+1,a,b)>=1){
f[x][y][a][b]=min(f[x][y][a][b],dfs(x,y,a,i)+dfs(x,i+1,a,b)+a-x+1);
}
}
return f[x][y][a][b];
}
void solve(){
// cdbg(N);
int n,m,K;
int T=0;
while(cin>>n>>m>>K){
T++;
printf("Case %lld: ",T);
memset(p,0,sizeof p);
for(int i=1;i<=n;i++){
int x=rd,y=rd;
p[x][y]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
p[i][j]+=p[i-1][j]+p[i][j-1]-p[i-1][j-1];
}
}
memset(f,0x3f3f,sizeof f);
cout<<dfs(1,1,n,m)<<endl;
}
}
signed main() {
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int T=1;
while(T--){
solve();
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...