zoukankan      html  css  js  c++  java
  • 动态规划——方案问题

    好长时间没有发新的博客(其实是因为一直在更新背包问题)

    名副其实,就是求方案数:

    以洛谷上 质数和分解

    这个题为例:

    可以明显看出这是一个完全背包,因为每个物品都可以选无数次,其实本蒟蒻觉得动规题首先考虑的就是背包

    那什么是费用什么又是价值呢?

    我们要求得是方案数,那么方案数就是价值

    那么,我们要凑的数就是体积,要凑的数就是容量

    #include<bits/stdc++.h>
    using namespace std;
    int ss[201]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,
    1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,} ;//这是200以内某个数是否为素数的表
    int a[10001],w[10001],v[10001],i,j,n,m,l;//w[]是体积,v[]是价值,a[][]的话就是我们平常用的f[][]数组
    int main() {
        int ans=0;
        while(scanf("%d",&n)!=EOF){//输入
            if(n==2){
                cout<<"1"<<endl;
                continue;
             }
            a[0]=1;//初始化
            for(i=1;i<=n;i++){//枚举一到n
                if(ss[i]==1){//是素数就可以选择选或不选
                    for(j=i;j<=n;j++){
                        a[j]+=a[j-i];//如果j-i能凑出n个,并且i也能凑出,那么a[j]就又有n中方案
                    }
                }
            }
            cout<<a[n]<<endl;
            memset(a,0,sizeof(a));//多测不清空,爆0两行泪
        }
        return 0;
    }
  • 相关阅读:
    php PDO操作类
    PDO笔记
    修改表中的enum字段
    php四种基础算法:冒泡,选择,插入和快速排序法
    MySQL中UNION和UNION ALL的使用
    02-HTML5新的input属性
    01-HTML5的介绍
    03-body标签中相关标签
    02-body标签中相关标签
    01-html介绍和head标签
  • 原文地址:https://www.cnblogs.com/lztzs/p/10818061.html
Copyright © 2011-2022 走看看