此代码如何状态压缩啊qwq
查看原帖
此代码如何状态压缩啊qwq
253765
houpingze楼主2021/2/14 20:03

rt,题解的思路好像和我不太一样qaq

/*writer:houpingze sb*/ 
#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,a[5010],ans,tmp,mod,f[550][505][550],b;
int main() {
	ios::sync_with_stdio(false);
	cin>>n>>m>>b>>mod;
	for(int i=1;i<=n;i++) cin>>a[i];
	/*
	f[i][j][k]表示1~i个程序员编写1~j行代码,出了k个bug,所需要的方案数 
	*/
	f[0][0][0]=1;
	
	for(int i=1;i<=n;i++){
		for(int j=0;j<=m;j++){//枚举1~i个人编写的总代码数 
			
			for(int k=0;k<=j;k++){//枚举第i个程序员要编写的代码行数 
				for(int l=0;l<=b;l++){ //枚举bug数 
					f[i][j][l]+=f[i-1][j-k][l-a[i]*k];
					f[i][j][l]%=mod;
				}
			}
			
		}
	} 
	for(int i=0;i<=b;i++) ans+=f[n][m][i],ans%=mod;
	cout<<ans;	
    return 0;
}

2021/2/14 20:03
加载中...