- #include
- using namespace std;
- const int N=1e3+5;
- int n,m,volume[N],value[N],dp[N][N];
- int main(){
- cin>>n>>m;
- for(int i=1;i<=n;i++) cin>>volume[i]>>value[i];
- for(int i=1;i<=n;i++){
- for(int j=0;j<=m;j++){
- dp[i][j]=dp[i-1][j];
- if(j>=volume[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-volume[i]]+value[i]);
- }
- }
- cout<
- return 0;
- }
AcWing 3. 完全背包问题
- #include
- using namespace std;
- const int N=1e3+5;
- int n,m,volume[N],value[N],dp[N][N];
- int main(){
- cin>>n>>m;
- for(int i=1;i<=n;i++) cin>>volume[i]>>value[i];
- for(int i=1;i<=n;i++){
- for(int j=0;j<=m;j++){
- dp[i][j]=dp[i-1][j];
- if(j>=volume[i]) dp[i][j]=max(dp[i-1][j],dp[i][j-volume[i]]+value[i]);
- }
- }
- cout<
- return 0;
- }
AcWing 1371. 货币系统
- #include
- using namespace std;
- long long n,m,dp[30][10005],volume[30];
- //dp[i][j]表示:只用前i种货币并且总钱数为j的所有方案数
- int main(){
- cin>>n>>m;
- for(int i=1;i<=n;i++) cin>>volume[i];
- for(int i=0;i<=n;i++) dp[i][0]=1;
- for(int i=1;i<=n;i++){
- for(int j=1;j<=m;j++){
- dp[i][j]=dp[i-1][j];
- if(j>=volume[i]) dp[i][j]+=dp[i][j-volume[i]];
- }
- }
- cout<
- return 0;
- }
AcWing 1226. 包子凑数(第八届省赛)
- 裴蜀定理:
- 若a,b是整数,且gcd(a,b)=d
- 那么对于任意的整数x,y,(ax+by)都一定是d的倍数
- 如果这些数的gcd是d
- 那么他们的组合是d的倍数
- 如果d不是1
- 那么必然有无限个数无法被组合出来
- #include
- using namespace std;
- int n,volume[105],ans;
- bool dp[105][10005];
- //dp[i][j]:用前i个笼子是否可以组成j个数目的包子
- //最大公约数:
- int gcd(int a,int b){
- return b?gcd(b,a%b):a;
- }
- int main(){
- cin>>n;
- int temp=0;
- for(int i=1;i<=n;i++){
- cin>>volume[i];
- temp=gcd(temp,volume[i]);
- }
- if(temp!=1) {puts("INF");return 0;}
- dp[0][0]=true;
- for(int i=1;i<=n;i++){
- for(int j=0;j<=10005;j++){
- dp[i][j]=dp[i-1][j];
- if(!dp[i][j]&&j>=volume[i]){
- dp[i][j]=dp[i][j-volume[i]];
- }
- }
- }
- for(int j=0;j<=10005;j++) if(!dp[n][j]) ans++;
- cout<
- return 0;
- }
AcWing 3417. 砝码称重(第十二届省赛)
- #include
- using namespace std;
- int n,volume[105],sum,ans;
- bool dp[105][200005];
- //dp[i][j]:用前i个砝码是否可以组成j,注意这里的j要开两倍(有绝对值)
- int main(){
- cin>>n;
- for(int i=1;i<=n;i++) cin>>volume[i],sum+=volume[i];
- dp[0][0]=true;
- for(int i=1;i<=n;i++){
- for(int j=0;j<=sum;j++){
- dp[i][j]=dp[i-1][j]||dp[i-1][j+volume[i]]||dp[i-1][abs(j-volume[i])];
- }
- }
- for(int i=1;i<=sum;i++) if(dp[n][i]) ans++;
- cout<
- return 0;
- }
AcWing 1234. 倍数问题(第九届省赛)
暴力法(超时未AC 60points):
- #include
- using namespace std;
- const int N=1e5+5;
- int n,m,a[N],ans;
- int main(){
- cin>>n>>m;
- for(int i=1;i<=n;i++) cin>>a[i];
- for(int i=1;i<=n;i++)
- for(int j=i+1;j<=n;j++)
- for(int k=j+1;k<=n;k++)
- if((a[i]+a[j]+a[k])%m==0) ans=max(ans,a[i]+a[j]+a[k]);
- cout<
- return 0;
- }
-
相关阅读:
Docker compose部署
嵌入式开发:2022年5大嵌入式GUI趋势
Vue封装websocket双向通讯
Python使用遗传算法(Evolutionary Algorithm、进化算法)构建优化器获取机器学习模型最优超参数组合、拟合最佳模型、实战+代码
从零开始做题:满屏的QR
【博学谷学习记录】超强总结,用心分享|架构师-前置知识-mongodb基本使用
超声波清洗机怎么选?优质清洁力强超声波清洗机推荐
跟我学c++中级篇——c++11中的模板变参化
FEELM利用能源管理系统建设绿色工厂,减少500吨碳排放
Java类初始化、实例化流程你真的清楚吗
-
原文地址:https://blog.csdn.net/2301_76144982/article/details/138999510