ECNU oj3447. 比昨天更多的棒棒糖 (Hard)
来源:互联网 发布:安徽边锋网络掼蛋下载 编辑:程序博客网 时间:2024/04/27 14:33
ECNU oj3447
*k重背包方案问题:背包的体积(1天分的糖果数)、包数量为k-1个
*将其做为0-1背包处理,时间复杂度O(n^2*k),太高!LTM!
我曾试着想将k-1,分成1,2…2^ans,k-1-(2^(ans+1)-1)这几个包,通过每个包的选与不选,可以组成选择所有0-(k-1)个此包的方案!
但在处理求最值时可以,求方案和不行!因为会出现重复的方案: 例:k=6,即分成1,2,2;即挑选2个此包的所有方案都会变成原来的2倍;
如果求最值,计算了重复的方案,最值相同,所以无影响!
*从生成函数角度看:
答案为x……x^n的系数和!
所以k重背包方案问题,变为0-1背包+完全背包问题!
0-1包:k*a[i];(a[i]=i)
无限包:a[i]=i;
时间复杂度变为O(n^2)!
#include <iostream>#include <stdio.h>#include <time.h>#include <string.h>#include <algorithm>#define llt long long#define Mod 998244353using namespace std;llt F[10001];int main(){ int n,x,k; cin>>n>>x>>k; memset(F,0,sizeof(F)); F[0]=1; for(int i=x;i<=n;++i){ for(int j=i;j<=n;++j)//完全背包 F[j]=(F[j]+F[j-i])%Mod; for(int j=n;j>=k*i;--j)//0-1背包 F[j]=(F[j]-F[j-k*i]+Mod)%Mod; } llt ans=0; for(int i=1;i<=n;++i) ans=(ans+F[i]+Mod)%Mod; cout<<ans<<endl; return 0;}
阅读全文
0 0
- ECNU oj3447. 比昨天更多的棒棒糖 (Hard)
- E2. 比昨天更多的棒棒糖 (Hard)
- EOJ Monthly 2017.12 (暨 ECNU 12 月内部选拔)比昨天更多的棒棒糖 (Easy)
- 比昨天的自己更强
- 儿子关于棒棒糖的诺言
- ecnu
- Learn Python The Hard Way学习(7) - 更多的打印
- Learn Python The Hard Way学习(24) - 更多的练习
- 今天比昨天好
- 比昨天好一点
- 今天要比昨天跑的更快一点
- ecnu 丽娃河的狼人传说
- 为什么自动化开发者比AUT开发者面临更多的挑战?
- Android OS 有比 iOS 更多的免费软件
- 为什么自动化开发者比AUT开发者面临更多的挑战?
- 组合使用容器可以获得比multimap更多的功能
- 一个获得更多细节的前景分割算法,比OTSU获得更多细节。
- Learn Python The Hard Way学习(5) - 更多的变量和打印
- Make a bootable iso with grub2
- java--String--JVM
- javaEE基础篇,day1:知识点归纳
- 过拟合函数中系数大小的理解
- 有问题的里程表
- ECNU oj3447. 比昨天更多的棒棒糖 (Hard)
- 树莓派 摄像头 VLC实时监控
- 机器学习应用实例(照片OCR)(斯坦福machine learning week 11)
- Ciclop开源3D扫描仪软件---Horus源码分析之src\horus\engine\calibration\moving_calibration.py
- 听说你用JavaScript写代码?本文是你的机器学习指南
- main函数参数解析
- FZU 1076 穿越沙漠
- nyist 737
- AR--基本原理实现科普