本文共 757 字,大约阅读时间需要 2 分钟。
#include#include #include #include #include typedef long long ll; using namespace std;ll c1[151],c2[151];struct fruit{ ll a,b;}f[150];bool cmp(fruit x,fruit y){ return x.a >N>>M) { for(i=1;i<=N;i++) cin>>f[i].a>>f[i].b; sort(f+1,f+1+N,cmp); for(i=0;i<=M;i++) c1[i]=c2[i]=0; // c1[0]=1; //不用这一步,解释同下 for(i=f[1].a;i<=f[1].b;i++) c1[i]=1; for(i=2;i<=N;i++) { for(j=0;j<=M;j++) { first=1; for(k=f[i].a;(k+j<=M)&&(k<=f[i].b);k++) //注意k的起点还有终点 /* if(f[i].a!=0) //其实如果f[i].a不等于0,也不用这步操作的,因为加入f[i].a不为0了,说明这种水果至少要有一个,0就代表没有一个了,显然是不符合的。 { if(first) { first=0; c2[j]+=c1[j]; } }*/ c2[j+k]+=c1[j]; } for(j=0;j<=M;j++) { c1[j]=c2[j]; c2[j]=0; } } cout< <
Tips:要摸清k的起点与终点,搞清楚题目的要求。
转载地址:http://wddci.baihongyu.com/