社区讨论
头好痛,好像..要长脑子
P1941[NOIP 2014 提高组] 飞扬的小鸟参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo208seq
- 此快照首次捕获于
- 2023/10/23 05:52 2 年前
- 此快照最后确认于
- 2023/11/05 15:33 2 年前
蒟蒻摆烂()
CPP#include <bits/stdc++.h>
using namespace std;
const int N=1e5+100;
int n,m,k,up[N],down[N],l[N],h[N],f[1145][N];
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
scanf("%d%d",&up[i],&down[i]);
for(int i=1;i<=n;i++)
{
l[i]=0;
h[i]=m+1;
}
for(int i=1;i<=k;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
l[x]=y,h[x]=z;
}
memset(f,0x3f,sizeof f);
for(int i=1;i<=m;i++) f[0][i]=0;
for(int i=1;i<=n;i++)
{
for(int j=up[i]+1;j<=m+up[i];j++)
f[i][j]=min(f[i-1][j-up[i]]+1,f[i][j-up[i]]+1);
for(int j=m+1;j<=m+up[i];j++)
f[i][m]=min(f[i][m],f[i][j]);
for(int j=1;j<=m-down[i];j++)
f[i][j]=max(f[i][j],f[i-1][j+down[i]]);
for(int j=1;j<=l[i];j++) f[i][j]=f[0][0];
for(int j=m;j>=h[i];j--) f[i][j]=f[0][0];
cout<<i<<endl;
for(int k=1;k<=m;k++)
cout<<f[i][k]<<" ";
cout<<endl;
}
int ans=f[0][0];
for(int i=1;i<=m;i++) ans=min(ans,f[n][i]);
if(ans>=f[0][0]){
cout<<"0"<<endl;
for(int i=n;i>=0;i--)
{
for(int j=1;j<=m;j++)
if(f[i][j]<f[0][0])
{
cout<<i;
return 0;
}
}
}
else cout<<"1"<<endl<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...