Submission #1962301


Source Code Expand

#include<stdio.h>
#include<algorithm>
using namespace std;
int w[210];
int v[210];
long long dp[210000];
long long mod=1000000007;
long long inf=mod*mod;
pair<long long,long long> tmp[50000];
long long snuke[51000];
long long petr[51000];
int main(){
	int a,b;
	scanf("%d%d",&a,&b);
	int wm=0;
	int vm=0;
	for(int i=0;i<a;i++){
		scanf("%d%d",v+i,w+i);
		wm=max(wm,w[i]);
		vm=max(vm,v[i]);
	}
	if(a<=30){
		int L=a/2;
		int R=a-L;
		int sz=(1<<L);
		for(int i=0;i<(1<<L);i++){
			long long V=0;
			long long W=0;
			for(int j=0;j<L;j++){
				if(i&(1<<j)){
					V+=v[j];
					W+=w[j];
				}
			}
			tmp[i]=make_pair(W,V);
		}
		std::sort(tmp,tmp+sz);
		long long cur=0;
		for(int i=0;i<sz;i++){
			cur=max(cur,tmp[i].second);
			snuke[i]=tmp[i].first;
			petr[i]=cur;
		}
		long long ret=0;
		for(int i=0;i<(1<<R);i++){
			long long V=0;
			long long W=0;
			for(int j=0;j<R;j++){
				if(i&(1<<j)){
					V+=v[L+j];
					W+=w[L+j];
				}
			}
			if(W>b)continue;
			int at=upper_bound(snuke,snuke+sz,b-W)-snuke-1;
			ret=max(ret,petr[at]+V);
		}
		printf("%lld\n",ret);
	}else if(a<=200&&wm<=1000){
		b=min(b,200000);
		for(int i=0;i<210000;i++){
			dp[i]=-inf;
		}
		dp[0]=0;
		for(int i=0;i<a;i++){
			for(int j=b-w[i];j>=0;j--){
				dp[j+w[i]]=max(dp[j+w[i]],dp[j]+v[i]);
			}
		}
		long long ret=0;
		for(int i=0;i<=b;i++)ret=max(ret,dp[i]);
		printf("%lld\n",ret);
	}else if(a<=200&&vm<=1000){
		for(int i=0;i<210000;i++){
			dp[i]=inf;
		}
		dp[0]=0;
		for(int i=0;i<a;i++){
			for(int j=200000-v[i];j>=0;j--){
				dp[j+v[i]]=min(dp[j+v[i]],dp[j]+w[i]);
			}
		}
		int ret=0;
		for(int i=0;i<=200000;i++){
			if(dp[i]<=b)ret=i;
		}
		printf("%d\n",ret);
	}else return 0;
}

Submission Info

Submission Time
Task D - ナップサック問題
User tozangezan
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1765 Byte
Status AC
Exec Time 67 ms
Memory 1792 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:14:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&a,&b);
                     ^
./Main.cpp:18:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d",v+i,w+i);
                        ^

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3
Score / Max Score 0 / 0 34 / 34 33 / 33 33 / 33
Status
AC × 4
AC × 19
AC × 17
AC × 14
Set Name Test Cases
Sample subtask00_sample_1.txt, subtask00_sample_2.txt, subtask00_sample_3.txt, subtask00_sample_4.txt
Subtask1 subtask01_0.txt, subtask01_1.txt, subtask01_10.txt, subtask01_11.txt, subtask01_12.txt, subtask01_13.txt, subtask01_14.txt, subtask01_2.txt, subtask01_3.txt, subtask01_4.txt, subtask01_5.txt, subtask01_6.txt, subtask01_7.txt, subtask01_8.txt, subtask01_9.txt, subtask00_sample_1.txt, subtask00_sample_2.txt, subtask00_sample_3.txt, subtask00_sample_4.txt
Subtask2 subtask02_0.txt, subtask02_1.txt, subtask02_10.txt, subtask02_11.txt, subtask02_12.txt, subtask02_13.txt, subtask02_14.txt, subtask02_2.txt, subtask02_3.txt, subtask02_4.txt, subtask02_5.txt, subtask02_6.txt, subtask02_7.txt, subtask02_8.txt, subtask02_9.txt, subtask00_sample_1.txt, subtask00_sample_3.txt
Subtask3 subtask03_0.txt, subtask03_1.txt, subtask03_10.txt, subtask03_11.txt, subtask03_2.txt, subtask03_3.txt, subtask03_4.txt, subtask03_5.txt, subtask03_6.txt, subtask03_7.txt, subtask03_8.txt, subtask03_9.txt, subtask00_sample_1.txt, subtask00_sample_4.txt
Case Name Status Exec Time Memory
subtask00_sample_1.txt AC 1 ms 128 KB
subtask00_sample_2.txt AC 6 ms 1152 KB
subtask00_sample_3.txt AC 1 ms 128 KB
subtask00_sample_4.txt AC 1 ms 128 KB
subtask01_0.txt AC 6 ms 1152 KB
subtask01_1.txt AC 6 ms 1152 KB
subtask01_10.txt AC 6 ms 1152 KB
subtask01_11.txt AC 6 ms 1152 KB
subtask01_12.txt AC 6 ms 1152 KB
subtask01_13.txt AC 6 ms 1152 KB
subtask01_14.txt AC 6 ms 1152 KB
subtask01_2.txt AC 6 ms 1152 KB
subtask01_3.txt AC 6 ms 1152 KB
subtask01_4.txt AC 5 ms 1152 KB
subtask01_5.txt AC 6 ms 1152 KB
subtask01_6.txt AC 5 ms 1152 KB
subtask01_7.txt AC 6 ms 1152 KB
subtask01_8.txt AC 6 ms 1152 KB
subtask01_9.txt AC 6 ms 1152 KB
subtask02_0.txt AC 32 ms 1792 KB
subtask02_1.txt AC 7 ms 1792 KB
subtask02_10.txt AC 7 ms 1792 KB
subtask02_11.txt AC 11 ms 1792 KB
subtask02_12.txt AC 14 ms 1792 KB
subtask02_13.txt AC 2 ms 1792 KB
subtask02_14.txt AC 4 ms 1792 KB
subtask02_2.txt AC 25 ms 1792 KB
subtask02_3.txt AC 6 ms 1792 KB
subtask02_4.txt AC 26 ms 1792 KB
subtask02_5.txt AC 3 ms 1792 KB
subtask02_6.txt AC 21 ms 1792 KB
subtask02_7.txt AC 14 ms 1792 KB
subtask02_8.txt AC 7 ms 1792 KB
subtask02_9.txt AC 22 ms 1792 KB
subtask03_0.txt AC 67 ms 1792 KB
subtask03_1.txt AC 67 ms 1792 KB
subtask03_10.txt AC 67 ms 1792 KB
subtask03_11.txt AC 67 ms 1792 KB
subtask03_2.txt AC 67 ms 1792 KB
subtask03_3.txt AC 67 ms 1792 KB
subtask03_4.txt AC 67 ms 1792 KB
subtask03_5.txt AC 67 ms 1792 KB
subtask03_6.txt AC 67 ms 1792 KB
subtask03_7.txt AC 67 ms 1792 KB
subtask03_8.txt AC 67 ms 1792 KB
subtask03_9.txt AC 67 ms 1792 KB