社区讨论
95求助!13号1 9875输出1 9872
P1941[NOIP 2014 提高组] 飞扬的小鸟参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo2k58cz
- 此快照首次捕获于
- 2023/10/23 15:09 2 年前
- 此快照最后确认于
- 2023/10/23 15:09 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,k,x[10001][2],p[10001][2];
int f[10001][1001][2];
int min(int a,int b) {
return a>b?b:a;
}
int has(int i,int j) {
return f[i][j][0]?f[i][j][1]:0x3f3f3f3f;
}
int main() {
scanf("%d %d %d",&n,&m,&k);
for(int i=1; i<=n; i++) {
scanf("%d %d",&x[i][0],&x[i][1]);
p[i][0]=m+1;
f[0][i][0]=1;
}
for(int i=1; i<=k; i++) {
int p_,l,h;
scanf("%d %d %d",&p_,&l,&h);
p[p_][0]=h;
p[p_][1]=l;
}
for(int j=0; j<=m; j++)
f[0][j][0]=1;
for(int i=1; i<=n; i++) {
for(int j=x[i][0]; j<=m+x[i][0]; j++) {
if(j<=m) {
if(f[i-1][j-x[i][0]][0]||f[i][j-x[i][0]][0])
f[i][j][1]=min(has(i-1,j-x[i][0])+1,has(i,j-x[i][0])+1),f[i][j][0]=1;
} else {
if(f[i-1][j-x[i][0]][0]||f[i][j-x[i][0]][0])
f[i][m][1]=min(min(has(i,j-x[i][0])+1,has(i-1,j-x[i][0])+1),has(i,m)),f[i][m][0]=1;
}
}
for(int j=m; j>=x[i][1]; j--)
if(f[i-1][j][0])
f[i][j-x[i][1]][1]=min(f[i-1][j][1],has(i,j-x[i][1])),f[i][j-x[i][1]][0]=1;
for(int j=m; j>=p[i][0]; j--)
f[i][j][0]=0;
for(int j=p[i][1]; j>=0; j--)
f[i][j][0]=0;
bool can=false;
for(int j=0; j<=m; j++)
if(f[i][j][0]) {
can=true;
break;
}
if(!can) {
int num=0;
for(int j=1; j<i; j++)
if(p[j][0]!=m+1)
num++;
printf("0\n%d",num);
return 0;
}
}
int mi=0x3f3f3f3f;
for(int i=1; i<=m; i++)
if(f[n][i][0])
mi=min(mi,f[n][i][1]);
printf("1\n%d",mi);
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...