lightoj 1125【01背包变性】
题意:
从n个数里选出m个来,还要使得这m个数之和被d整除。
给一个n和q,再给n个数,再给q个询问,每个询问包含两个数,d,m;
对于每个case输出每个q个询问的可行的方案数。
思路:
每个数只能被取一次
那我直接dp一下,dp[i][j]直接代表前i个物品有j值;
然后j这个值由2^31*200…这就不行了。。。
虽然可以/d
变变变!!!
但是我们可以把余数开一维啊,然后还是前i个物品开一维,但是还有选几个再开一维,那就开三维了。。。
01背包开两维反着更新一下就好了。
dp[i][j]代表选i个有j余数的方案数。
然后考虑C(200,10)DP要开long long
初始化,不选的时候,dp[0][0]=1;ok。
code………………
#include<bits/stdc++.h>
//#include<cstdio>
//#include<math.h>
//#include<string.h>
//#include<algorithm>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const double eps=1e-5;
const double pi=acos(-1.0);
const int mod=1e8+7;
const LL INF=0x3f3f3f3f;
const int N=1e2+10;
int a[N*2];
LL dp[12][25];
int main()
{
int cas=1;
int n,w,q,d,m;
int t,x,sum;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("Case %d:\n",cas++);
for(int k=1;k<=q;k++)
{
scanf("%d%d",&d,&m);
memset(dp,0,sizeof(dp));
dp[0][0]=1LL;
for(int i=1;i<=n;i++)
{
int temp=a[i]%d;
for(int j=m;j>=1;j--)
for(int x=0;x<d;x++)
dp[j][x]+=dp[j-1][(x+2*d-temp)%d];
}
printf("%lld\n",dp[m][0]);
}
}
return 0;
}
lightoj 1125【01背包变性】的更多相关文章
- FOJProblem 2214 Knapsack problem(01背包+变性思维)
http://acm.fzu.edu.cn/problem.php?pid=2214 Accept: 4 Submit: 6Time Limit: 3000 mSec Memory Lim ...
- lightoj 1125【背包·从n个选m个】
题意: 给你 n 个背包,然后给你两个数,D,M,问你从n个里面挑M个出来,有多少种方法能够整除D: 思路: 试想我先不挑M个出来的话,仅仅是构造一个D的倍数,其实就是构造一个数的话, 其实就是个递推 ...
- (概率 01背包) Just another Robbery -- LightOJ -- 1079
http://lightoj.com/volume_showproblem.php?problem=1079 Just another Robbery As Harry Potter series i ...
- LightOJ 1079 Just another Robbery (01背包)
题意:给定一个人抢劫每个银行的被抓的概率和该银行的钱数,问你在他在不被抓的情况下,能抢劫的最多数量. 析:01背包,用钱数作背包容量,dp[j] = max(dp[j], dp[j-a[i] * (1 ...
- LightOJ 1079 Just another Robbery (01背包)
题目链接 题意:Harry Potter要去抢银行(wtf???),有n个银行,对于每个银行,抢的话,能抢到Mi单位的钱,并有pi的概率被抓到.在各个银行被抓到是独立事件.总的被抓到的概率不能超过P. ...
- UVALive 4870 Roller Coaster --01背包
题意:过山车有n个区域,一个人有两个值F,D,在每个区域有两种选择: 1.睁眼: F += f[i], D += d[i] 2.闭眼: F = F , D -= K 问在D小于等于一定限度的时 ...
- POJ1112 Team Them Up![二分图染色 补图 01背包]
Team Them Up! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7608 Accepted: 2041 S ...
- Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)
传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...
- 51nod1085(01背包)
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1085 题意: 中文题诶~ 思路: 01背包模板题. 用dp[ ...
随机推荐
- 用Meta 取消流量器缓存方便调试
<!-- 禁止浏览器从本地缓存中调阅页面.--> <meta http-equiv="pragram" content="no-cache"& ...
- palindrome-partitioning I&II——回文切割、深度遍历
I: Given a string s, partition s such that every substring of the partition is a palindrome. Return ...
- LeetCode(21)题解:Merge Two Sorted Lists
https://leetcode.com/problems/merge-two-sorted-lists/ Merge two sorted linked lists and return it as ...
- POJ 2750 Potted Flower(线段树+dp)
题目链接 虽然是看的别的人思路,但是做出来还是挺高兴的. 首先求环上最大字段和,而且不能是含有全部元素.本来我的想法是n个元素变为2*n个元素那样做的,这样并不好弄.实际可以求出最小值,总和-最小,就 ...
- sanic官方文档解析之ssl,debug mode模式和test(测试)
1,ssl 示例: 可选择的SSLContent from sanic import Sanic import ssl context = ssl.create_default_context(pur ...
- NameNode和JobTracker的网络接口
Hadoop快速入门 http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html
- DOM操作三
1.以一个对象的x和y属性的方式返回滚动条的偏移量 function getScrollOffsets(w){ //使用指定的窗口,如果不带参数则使用当前窗口 w= w || window; //除了 ...
- CH 5302 金字塔(区间DP)
CH 5302 金字塔 \(solution:\) 很神奇的一道题目,当时看到还以为是一道字符串求回文子串的题目.但是数据范围很小,而且只知道回文串也不好做.但是我们观察可得,如果是深度搜索便利,那么 ...
- hdoj 1875 畅通project再续【最小生成树 kruskal && prim】
畅通project再续 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其它的小岛时都要通过划小船来实现. ...
- Fastreport生成WEB报表
开发WEB应用系统通常都会遇到报表打印问题.简单应用可利用IE的页面打印功能,利用HTML标签控制格式来实现.但复杂的业务型应用系统,报表不仅是组成应用的 重要部分,还常常是相当复杂的.现在很多应用系 ...