2 900 250
0 50
AC-code:
Floyd:
#include<cstdio> #define INF 0x3f3f3f3f int main() { int t,n,k,i,j; scanf("%d",&t); while(t--) { int flag=0; scanf("%d",&n); int min=n; for(k=0;k<=n/150;k++) { for(i=0;i<=n/200;i++) { for(j=0;j<=n/350;j++) { if(min>n-k*150-i*200-j*350&&n-k*150-i*200-j*350>=0) min=n-k*150-i*200-j*350; if(min==0) { flag=1; break; } } if(flag) break; } if(flag) break; } printf("%d\n",min); } return 0; }
完全背包:注意。。。数组开小会超时。。
#include<cstdio> #include<cstring> #define max(a,b) a>b?a:b int f[10010]; int main() { int t,n,i,j; int w[3]={150,200,350}; scanf("%d",&t); while(t--) { memset(f,0,sizeof(f)); scanf("%d",&n); for(i=0;i<3;i++) for(j=w[i];j<=n;j++) f[j]=max(f[j],f[j-w[i]]+w[i]); printf("%d\n",n-f[n]); } return 0; }