今天考试是搜索和动规的结合。
蒜头君之完美属性
大家都知道蒜头君一直在玩一个游戏,游戏推出了一个新的系统——属性药剂!
怪物会随机掉落一些属性药剂,一瓶属性药剂有两个属性 和 表示使用了以后可以增加
点额外力量和 点额外敏捷
而蒜头君作为一个浑身是肝的满级大佬,在短时间内就刷出了总共 瓶不同的属性药剂,现在
他希望选择一些属性药剂使用,使得他的额外力量值可以达到 ,额外敏捷值可以达到
蒜头君是有强迫症的,所以他希望自己的额外力量值刚好是 ,额外敏捷值刚好是 ,不能
多也不能少。
蒜头君一开始的额外属性都是 ,当然一瓶药剂也只能使用一次
现在蒜头君想知道他有多少种使用药剂的方案?
注意如果选择了 三瓶药剂,使用顺序不同不算多种方案
输入格式
输入第一行包含第三个整数 ,含义如题接下来 行每行包含两个整数 ,分别表
示第 瓶药剂能增加的力量和敏捷
输出格式
输出只有一行,表示方案总数
输入:4 3 2输出:3
2 1
3 2
1 1
2 1
实在不知道怎么写
#include
using namespace std;
int a[58]={0},b[58]={0},n,l,m,z1=0,z2=0;
int f[58]={0},e[58]={0};
int main(){
int c[58]={0},d[58]={0};
freopen("perfect.in","r",stdin);
freopen("perfect.out","w",stdout);
cin>>n>>l>>m;
for(int i=1;i>a[i]>>b[i];
if(a[i]==l) z1++;
if(b[i]==m) z2++;
}
for(int i=1;i<=n;i++){
c[i]=1;
f[i]=f[i-1]+a[i];
if(f[i]==l&&i!=1) z1++;
for(int j=1;jl||a[i]==l){ f[i]=a[i]; for(int k=i-1;k>=1;k--) c[k]=0;}
if(a[i]>l) break;
if(((f[j]+f[i])==l || (f[j]+a[i])==l || (a[j]+a[i])==l)&&c[j]==0){
z1++;}
}}
for(int i=1;i<=n;i++){
d[i]=1;
e[i]=e[i-1]+b[i];
if(e[i]==m&&i!=1) z2++;
for(int j=1;jm||b[i]==m){ e[i]=b[i]; for(int k=i-1;k>=1;k--) d[k]=0;
}
if(b[i]>m) break;
if(((e[j]+e[i])==m || (e[j]+b[i])==m || (b[j]+b[i])==m)&&d[j]==0) {
z2++; }
}}
if(z1>z2)
cout<<z2;
else
cout<<z1;
return 0;
}