昨天 abc(abc373F)做法求 hack
  • 板块学术版
  • 楼主wang54321
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/9/30 09:26
  • 上次更新2024/9/30 14:30:08
查看原帖
昨天 abc(abc373F)做法求 hack
778745
wang54321楼主2024/9/30 09:26

求 hack 或者证明

就是暴力加剪枝

#include<bits/stdc++.h>
using namespace std;
#ifdef LOCAL
	FILE *InFile=freopen("in_out/in.in","r",stdin),*OutFile=freopen("in_out/ans.ans","w",stdout);
#else
	FILE *InFile=stdin,*OutFile=stdout;
#endif
const int N=1e5;
struct O{int w,v;}cc[N];
long long f[N],cnt;
int main(){
	int n,c;scanf("%d%d",&n,&c);
	for(int i=1;i<=n;i++) scanf("%d%d",&cc[i].w,&cc[i].v);
	//sort(cc+1,cc+n+1,[](const O &a,const O &b){return a.w==b.w?a.v>b.v:a.w<b.w;}); 卡掉了下面的排序可以试试这个。
	sort(cc+1,cc+n+1,[](const O &a,const O &b){return a.v>b.v;});
	for(int i=1;i<=n;i++){
		bool con=1;
		for(int k=1;con;k++){
			con=0;
			for(int j=c-cc[i].w;j>=0;j--){
				if(f[j]+cc[i].v-2*k+1>f[j+cc[i].w])
					con=1,f[j+cc[i].w]=f[j]+cc[i].v-2*k+1;
				++cnt;
			}
		}
	}
	cerr<<cnt<<endl;
	printf("%lld",f[c]);
}
2024/9/30 09:26
加载中...