求助各位大佬

P3139 [USACO16FEB] Milk Pails S

~~Id 好评(~~
by ✨杨柳白皮✨ @ 2020-08-30 18:51:19


~~Id 好评(~~
by myee @ 2020-08-30 18:52:30


@[恋爱王子](/user/338992) || $\text{if}$ 判断是多余的。 ```cpp #include<bits/stdc++.h> using namespace std; template<class code>inline code read(const code &a){ code x=0;short w=0;char ch=0; while(!isdigit(ch)){w|=ch=='-';ch=getchar();} while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();} return w?-x:x; } void pr(register int x){ if(x<0){putchar('-');x=-x;} if(x>=10)pr(x/10); putchar(x%10+48); } int x,y,k,m,ans=214747; bool f[105][105][105]; inline void dfs(register int now,register int a,register int b){ if(now>k){ans=min(ans,abs(a+b-m));return;} if(f[a][b][now]==1)return;//{ans=min(ans,abs(a+b-m));return;} f[a][b][now]=1; dfs(now+1,x,b); dfs(now+1,a,y); dfs(now+1,0,b); dfs(now+1,a,0); if(y-b>a)dfs(now+1,0,b+a); else dfs(now+1,a-(y-b),y); if(x-a>b)dfs(now+1,a+b,0); else dfs(now+1,x,b-(x-a)); } int main(){ x=read(x),y=read(y),k=read(k),m=read(m); dfs(1,0,0); printf("%d",ans); return 0; } ```
by JK_LOVER @ 2020-08-30 18:58:00


~~id好评~~
by JK_LOVER @ 2020-08-30 18:58:17


@[JK_LOVER](/user/227824) 但现在80了 ``` #include <cstdio> #include <cctype> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <map> #include <queue> #include <stack> #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") #pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native") #pragma GCC optimize(2) #include <immintrin.h> #include <emmintrin.h> using namespace std; template<class code>inline code read(const code &a){ code x=0;short w=0;char ch=0; while(!isdigit(ch)){w|=ch=='-';ch=getchar();} while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();} return w?-x:x; } void pr(register int x){ if(x<0){putchar('-');x=-x;} if(x>=10)pr(x/10); putchar(x%10+48); } int x,y,k,m,ans=214747; //bool f[105][105][105]; bool f[105][105]; inline void dfs(register int now,register int a,register int b){ if(now>k)return; ans=min(ans,abs(a+b-m)); if(f[a][b]==1)return; //if(f[a][b][now]==1)return; //f[a][b][now]=1; f[a][b]=1; dfs(now+1,x,b); dfs(now+1,a,y); dfs(now+1,0,b); dfs(now+1,a,0); if(y-b>=a)dfs(now+1,0,b+a); else dfs(now+1,a-(y-b),y); if(x-a>=b)dfs(now+1,a+b,0); else dfs(now+1,x,b-(x-a)); } int main(){ x=read(x),y=read(y),k=read(k),m=read(m); dfs(1,0,0); printf("%d",ans); return 0; } ```
by 恋爱王子 @ 2020-08-30 18:59:37


@[JK_LOVER](/user/227824) 哦,不用了,谢谢您
by 恋爱王子 @ 2020-08-30 19:00:45


@[恋爱王子](/user/338992) 我发的代码可过,要不再看看?
by JK_LOVER @ 2020-08-30 19:00:48


|