CSP2022-09
第一題


不給提示可能還真想不到,按照提示寫就行
#include <cmath> #include <iostream> #include <iomanip> using namespace std; const int N = 1e6+10 ; int n,m ; int a[N],b[N],c[N] ; int mul[N] ; int main(){ c[0] = 1; cin>>n>>m ; for(int i=1; i<=n; i++) scanf("%d", &a[i]) ; for(int i=1; i<=n; i++) { c[i] = c[i-1]*a[i]; mul[i] = m % c[i] ; } for(int i=1; i<=n; i++) { b[i] = ( mul[i] - mul[i-1] ) / c[i-1] ; } for(int i=1; i<=n; i++) printf("%d ", b[i]); return 0 ; }
第二題

近似為01背包問題來做就行,直接ac
#include <iostream> #include <algorithm> using namespace std; const int N = 1e6+10 ; // 0 1背包問題 int n,x ; int v[N] ; int f[N] ; // 前i個中體積不超過sum的選擇 int main(){ cin>>n>>x; int sum = 0; for(int i=1; i<=n; i++) { scanf("%d", &v[i]) ; sum += v[i] ; } for(int i=1 ; i<=n; i++ ) for(int j=sum ; j>=v[i]; j--) { f[j] = max(f[j], f[j-v[i]] + v[i]); } for(int j=0; j<=sum; j++) if(f[j]>=x) { cout<<f[j]<<endl; break ; } return 0 ; }
PS: 本文來自博客園,作者:尊滴菜,轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/zundicai/p/17367256.html

浙公網(wǎng)安備 33010602011771號