社区讨论
飞翔的小鸟不知道为什么求大神指点
学术版参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi7y9lmh
- 此快照首次捕获于
- 2025/11/21 05:35 4 个月前
- 此快照最后确认于
- 2025/11/21 05:35 4 个月前
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
const int MAXN=1e4+5;
int x[MAXN],down[MAXN];
int f[MAXN][1005];
int vis[MAXN];
int low[MAXN];
int h[MAXN];
int main()
{
cin>>n>>m>>k;
for(int i=0;i<n;i++)
cin>>x[i]>>down[i];
for(int i=1;i<=k;i++)
{
int p;
cin>>p;
int a,b;
cin>>a>>b;
low[p]=a;
h[p]=b;
vis[p]=1;
CPP}
memset(f,0x3f,sizeof(f));
for(int i=1;i<=m;i++)
f[0][i]=0;
//先完全背包 在01
for(int i=1;i<=n;i++)
{
for(int j=x[i-1]+1;j<=m+x[i-1];j++)
f[i][j]=min(f[i-1][j-x[i-1]]+1,f[i][j-x[i-1]]+1);
CPP for(int j=m+1;j<=m+x[i-1];j++)
f[i][m]=min(f[i][m],f[i][j]);
for(int j=1;j<=m-down[i-1];j++)
f[i][j]=min(f[i][j],f[i-1][j+down[i-1]]);
if(vis[i]==1)
{
for(int j=0;j<=low[i];j++)
f[i][j]=f[0][0];
for(int j=h[i];j<=m;j++)
f[i][j]=f[0][0];
}
}
int ans=f[0][0];
/for(int i=1;i<=m;i++)
cout<<f[n][i]<<" ";/
CPPfor(int i=0;i<=m;i++)
ans=min(ans,f[n][i]);
if(ans<f[0][0])
{
cout<<"1"<<endl<<ans;
exit(0);
}
else{
int i,j;
for(i=n;i>=1;i--) {
for(j=1;j<=m;++j) {
if(f[i][j]<f[0][0]) break;
}
if(j<=m) break;
}
ans=0;
for(int j=1;j<=i;++j) {
if(vis[j]) ans++;
}
cout<<"0"<<endl<<ans;
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...