1 条题解

  • 0
    @ 2024-12-24 9:59:27

    C :

    #include <stdio.h>
    #include <stdlib.h>
    #define INF 0x7fffffff
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char *argv[]) {
    	int n;
    	while(scanf("%d",&n)!=EOF){
    		
    		while(n--){
    			int s,g;
    			scanf("%d%d",&s,&g);
    			g-=s;
    			int w[550],v[550];
    			int number;
    			scanf("%d",&number);
    			int i,j;
    			int dp[10050]; 
    			for(i=0;i<number;i++){
    				scanf("%d%d",&v[i],&w[i]);
    			}
    			for(i=0;i<=g;i++){
    				dp[i]=INF;
    			}
    			dp[0]=0;
    			for(i=0;i<number;i++){
    				for(j=w[i];j<=g;j++){
    					if(dp[j-w[i]]!=INF)
    					dp[j]=dp[j]<(dp[j-w[i]]+v[i])?dp[j]:(dp[j-w[i]]+v[i]);
    				}
    			}
    			if(dp[g]!=INF)
    			printf("The minimum amount of money in the piggy-bank is %d.\n",dp[g]);
    			else
    			printf("This is impossible.\n");
    		}
    	}
    	return 0;
    }
    

    C++ :

    #include <stdio.h>
    int c[555][10001];
    void run()
    {
    	int i,j,a[666],b[666],e,f,n,k;
    	scanf("%d%d%d",&e,&f,&n);
    	f-=e;
    	for(i=1;i<=n;i++)
    		scanf("%d%d",&a[i],&b[i]);
    	for(i=1;i<=n;i++)
    		for(j=0;j<=f;j++)
    			c[i][j]=1000000000;
    	c[1][0]=0;
    	for(i=1;i<=n;i++)
    		for(j=0;j<=f;j++)
    		{
    			k=1000000000;
    			if(j>=b[i])
    				k=c[i][j-b[i]]+a[i];
    			if(i>1)
    				if(k>c[i-1][j])
    					k=c[i-1][j];
    			if(c[i][j]>k)
    				c[i][j]=k;
    		}
    	if(c[n][f]==1000000000)
    		printf("This is impossible.\n");
    	else
    		printf("The minimum amount of money in the piggy-bank is %d.\n",c[n][f]);
    }
    int main()
    {
    	int t;
    	scanf("%d",&t);
    	while(t!=0)
    	{
    		t--;
    		run();
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1499
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者