当前位置:网站首页>Knight defeats demon king (Backpack & DP)
Knight defeats demon king (Backpack & DP)
2022-07-07 06:18:00 【Harris-H】
The knight defeated the demon king ( knapsack &dp)
Because the plan is different , It depends on the energy and difference used by a knight .
Therefore, we consider using backpacks to deal with the energy used by each Knight i i i The biggest damage , When seeking the maximum, in order to include all cases .
Then proceed dp, Make f ( i , j ) f(i,j) f(i,j) Before presentation i i i Knights caused j j j Number of schemes for point damage .
Specially , f ( i , m ) f(i,m) f(i,m) Before presentation i i i Knights cause greater than or equal to j j j Number of schemes for point damage .
Then proceed dp that will do .
Time complexity : O ( n × 3000 ) O(n\times 3000) O(n×3000)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int mod = 998244353;
int n, m;
int fans[3009][3009], ff[3009];
int a[3009], b[3009];
void solved() {
cin >> n >> m;
fans[0][0] = 1;
int s;
for(int ttf = 1; ttf <= n; ttf ++) {
cin >> s;
for(int i = 0; i < s; i ++) cin >> a[i];
for(int i = 0; i < s; i ++) cin >> b[i];
for(int i = 0; i <= 3000; i ++) ff[i] = 0; /// initialization dp Array
for(int i = 0; i < s; i ++) {
/// Find out the maximum attack power that each energy consumption of the current knight can cause
for(int j = 3000; j >= b[i]; j --) {
if(ff[j - b[i]] || j - b[i] == 0)
ff[j] = max(ff[j - b[i]] + a[i], ff[j]);
}
} /// n Total time complexity of knights : sum(s) * 3000
for(int i = 0; i <= 3000; i ++) {
if(ff[i] == 0 && i != 0) continue; /// Some values cannot be represented , The magnitude of the value that can be represented is sum(b)
if(ff[i] > m) ff[i] = m; /// Attack overflow processing
for(int j = 0; j < ff[i]; j ++) /// Here is the number of schemes in the attack overflow part , It needs to be calculated separately
fans[ttf][m] = (fans[ttf][m] + fans[ttf - 1][m - j]) % mod;
for(int j = m; j >= ff[i]; j --) /// This for And the one above for The total time complexity of is : sum(b) * m
fans[ttf][j] = (fans[ttf][j] + fans[ttf - 1][j - ff[i]]) % mod;
} /// n The total time complexity of a knight here : n * 3000
} /// Total time complexity : sum(s) * 3000 + n * 3000 + sum(b) * m
cout << fans[n][m];
}
int main() {
// int ttx; cin >> ttx; while(ttx --)
solved();
return 0;
}
边栏推荐
猜你喜欢
Cf:c. column swapping [sort + simulate]
Vscode for code completion
Implementation of VGA protocol based on FPGA
Introduction to yarn (one article is enough)
JVM command - jmap: export memory image file & memory usage
SAP Spartacus checkout 流程的扩展(extend)实现介绍
可极大提升编程思想与能力的书有哪些?
tkinter窗口选择pcd文件并显示点云(open3d)
Chain storage of stack
3531. Huffman tree
随机推荐
Go language learning notes - Gorm use - native SQL, named parameters, rows, tosql | web framework gin (IX)
基于ADAU1452的DSP及DAC音频失真分析
Storage of dental stem cells (to be continued)
[SOC FPGA] peripheral PIO button lights up
cf:C. Column Swapping【排序 + 模拟】
JVM monitoring and diagnostic tools - command line
Array proof during st table preprocessing
可极大提升编程思想与能力的书有哪些?
[Shell]常用shell命令及测试判断语句总结
牛客小白月赛52 E.分组求对数和(二分&容斥)
C note 13
When we talk about immutable infrastructure, what are we talking about
Solve pod install error: FFI is an incompatible architecture
[FPGA tutorial case 13] design and implementation of CIC filter based on vivado core
绕过open_basedir
3428. Put apples
Dc-7 target
Bypass open_ basedir
[SOC FPGA] custom IP PWM breathing lamp
Find duplicate email addresses